Python脚本之间的通信

时间:2017-03-27 03:02:21

标签: python variables flask pass-by-reference

我有2个python脚本。第一个是Flask服务器,第二个是NRF24L01接收器/发送器(On Raspberry Pi3)脚本。这两个脚本同时运行。我想在这两个脚本之间传递变量(变量不是常量)。我怎么能以最简单的方式做到这一点?

2 个答案:

答案 0 :(得分:2)

python RPC设置怎么样?即在每个脚本上运行服务器,每个脚本也可以是相互调用远程过程调用的客户端。

https://docs.python.org/2/library/simplexmlrpcserver.html#simplexmlrpcserver-example

答案 1 :(得分:1)

我想基于Sush的提议提出一个完整的解决方案。在过去的几天里,我一直在努力解决两个进程之间的通信问题(在我的情况下 - 在同一台机器上)。有很多解决方案(套接字,RPC,简单RPC或其他服务器),但它们都有一些限制。对我有用的是SimpleXMLRPCServer模块。快速,可靠,优于各方面的直接套接字操作。功能齐全的服务器可以从客户端干净地关闭:

from SimpleXMLRPCServer import SimpleXMLRPCServer
quit_please = 0

s = SimpleXMLRPCServer(("localhost", 8000), allow_none=True) #allow_none enables use of methods without return
s.register_introspection_functions() #enables use of s.system.listMethods()
s.register_function(pow) #example of function natively supported by Python, forwarded as server method 

# Register a function under a different name
def example_method(x):
    #whatever needs to be done goes here
    return 'Enterd value is ', x
s.register_function(example_method,'example')

def kill():
    global quit_please
    quit_please = 1
    #return True
s.register_function(kill)

while not quit_please:
    s.handle_request()

我的主要帮助是找到了15年的文章here

此外,许多教程都使用s.server_forever(),如果没有多线程,这是一个真正的痛苦。

要与服务器通信,您只需要做两行:

import xmlrpclib
serv = xmlrpclib.ServerProxy('http://localhost:8000')

示例:

>>> import xmlrpclib
>>> serv = xmlrpclib.ServerProxy('http://localhost:8000')
>>> serv.example('Hello world')
'Enterd value is Hello world'

那就是它!功能齐全,快速可靠的通信。我知道总会有一些改进,但在大多数情况下,这种方法可以完美地运作。