我有2个python脚本。第一个是Flask服务器,第二个是NRF24L01接收器/发送器(On Raspberry Pi3)脚本。这两个脚本同时运行。我想在这两个脚本之间传递变量(变量不是常量)。我怎么能以最简单的方式做到这一点?
答案 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'
那就是它!功能齐全,快速可靠的通信。我知道总会有一些改进,但在大多数情况下,这种方法可以完美地运作。