2017-03-27 3 views
1

私は2つのpythonスクリプトを持っています。 1stはFlaskサーバ、2ndはNRF24L01受信機/送信機(Raspberry Pi3)スクリプトです。両方のスクリプトが同時に実行されています。私はこれらの2つのスクリプトの間で変数(変数は一定ではありません)を渡したいと思います。私はそれをどのようにもっとも簡単な方法で行うことができますか?Pythonスクリプト間の通信

答えて

1

python RPCの設定はどうですか?私。各スクリプトでサーバーを実行し、各スクリプトを相互にリモートプロシージャコールを呼び出すクライアントにすることもできます。

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

+0

ありがとうございました。試してみます。 C、C++を使用する場合、ポインタを使用してそれを行うことができますか?しかし、Pythonはポインタをサポートしていません。別の私のアイデアは、両方のスクリプトをマージすることですが、私は遅いプログラムを持っていることを恐れていますか? –

+0

なぜあなたはショープログラムを持っていると思いますか?どんなレベルのレスポンスが必要ですか? – Sush

0

私はSushの命題に基づか完全なソリューションを提案したいと思います。ここ数日間、別々に実行される2つのプロセス間の通信の問題に苦しんでいます(私の場合は同じマシン上で)。多くのソリューション(ソケット、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() 

私の主なヘルプは、古い記事がhereた15年でした。

また、多くのチュートリアルでは、マルチスレッド化せずにきれいに停止することが本当の痛みであるs.server_forever()を使用しています。

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

例:

は、あなたがする必要があるすべては基本的に2行でサーバーと通信するには

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

そして、それはそれです!完全に機能し、高速かつ信頼できる通信。私は常にいくつかの改善が行われていることを認識していますが、ほとんどの場合、このアプローチは完璧に機能します。

関連する問題