python - 将变量从一个 Python 脚本发送到另一个

标签 python json variables

我有一个 python 脚本,它不断监听来自另一台服务器的 json 消息。当它收到消息时,其中一个值将被放入变量中。收到此消息后,我需要启动另一个 python 脚本并处理传递给它的变量。谁能帮我解决这个问题吗?

我对 python 很陌生,非常感谢您能给我的任何帮助,因为我正在努力理解类似问题的其他一些答案。

谢谢!

下面是不断运行以接收消息的代码:

class MyListener(stomp.ConnectionListener):
    def on_error(self, headers, message):
        print 'received an error %s' % message

    def on_message(self, headers, message):
        print 'received a message %s' % message
        obj = json.loads(message)
        detectedimsi = obj["imsi"]
        print detectedimsi

最佳答案

要运行任何其他程序,只需使用subprocess模块中的函数即可。但存在三个复杂性。

首先,您想要运行另一个 Python 脚本,而不是二进制文件。假设您希望使用与运行时相同版本的 Python 来运行它,即使安装了多个 Python。因此,您想使用 sys.executable 作为程序。例如:

subprocess.check_call([sys.executable, 'otherscript.py'])

其次,您想要传递一些数据。对于适合命令行的少量可打印字符串数据,只需将它们作为参数传递即可:

subprocess.check_call([sys.executable, 'otherscript.py', detectedimsi])

然后,在另一个脚本中,您只需查看 sys.argv[1] 即可接收数据。

如果您尝试传递二进制数据或大量文本,您将需要通过管道传递它。最简单的方法是通过 stdin 传递它。但我认为这与此无关。

第三,您尝试在异步网络客户端或服务器内执行此操作。因此,您不能只运行另一个脚本并阻塞直到它完成,除非您完全确定它会很快完成。如果您的服务器框架有一种方法可以将子进程集成到其中(Twisted 是我使用过的唯一一个可以做到这一点的框架,但可能还有其他框架),那就太好了。如果您可以将进程的标准输出管道放入框架的事件循环中,则可以伪造它(基本上,如果您不关心Windows,并且您的框架有办法将文件添加到 react 器)。但否则,您将不得不使用线程。

我假设您不需要从其他脚本获取任何结果,甚至不需要知道它何时完成。如果事实并非如此,事情就会变得更加复杂。

把它们放在一起:

def on_message(self, headers, message):
    print 'received a message %s' % message
    obj = json.loads(message)
    detectedimsi = obj["imsi"]
    print detectedimsi
    thread = threading.Thread(target=subprocess.call, 
                              args=[[sys.executable, 'otherscript.py', detectedimsi]])
    thread.daemon = True
    thread.start()

关于python - 将变量从一个 Python 脚本发送到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16788331/

相关文章:

python - 在python中将列表转换为二维数组

Python:上下对齐 bool numpy 数组的索引

json - 无法使用 Alamofire 和 SwiftyJSON 访问数组、JSON 响应中的 url

eclipse - 在eclipse中设置引用其他环境变量的环境变量

python - 这个网站有什么技巧?

javascript - 如何从 extjs 中的 json 为嵌套组合框创建数组

javascript - 如何自动化基于地理位置的 Json

python - 在为用户输入分配变量时如何修复代码中的 "invalid syntax"错误?

ruby 在方法外初始化实例变量

python - Django 模型 OneToOneField : "This field is required" error in admin