2017-03-27 13 views
1

Ich habe 2 Python-Skripte. 1. ist Flask Server und 2. Ist NRF24L01 Empfänger/Sender (auf Raspberry Pi3) Skript. Beide Skripte werden gleichzeitig ausgeführt. Ich möchte Variablen (Variablen sind nicht konstant) zwischen diesen beiden Skripten übergeben. Wie kann ich das am einfachsten machen?Kommunikation zwischen Python-Skripten

Antwort

1

Wie wäre es mit einem Python-RPC-Setup? I.e. Führen Sie für jedes Skript einen Server aus, und jedes Skript kann auch ein Client sein, um Remote Procedure Calls gegenseitig aufzurufen.

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

+0

Danke. Ich werde es versuchen. Wenn ich C, C++ benutzen würde, könnte ich den Zeiger dafür benutzen? Aber Python unterstützt keine Zeiger, oder? Eine andere Idee ist es, beide Skripte zusammenzuführen, aber ich fürchte, dann werde ich langsames Programm haben? –

+0

Warum denken Sie, dass Sie ein Show-Programm haben, welche Reaktionsfähigkeit benötigen Sie? – Sush

0

Ich möchte eine komplette Lösung Stationierung auf Sush Proposition vorzuschlagen. In den letzten Tagen habe ich mich mit dem Problem der Kommunikation zwischen zwei Prozessen auseinandergesetzt (in meinem Fall - auf demselben Rechner). Es gibt viele Lösungen (Sockets, RPC, einfache RPC oder andere Server), aber alle hatten einige Einschränkungen. Was für mich funktionierte, war ein SimpleXMLRPCServer-Modul. Schnell, zuverlässig und besser als der direkte Socket-Betrieb in jeder Hinsicht. Voll funktionsfähiger Server, der sauber von Client geschlossen werden kann, ist ebenso kurz:

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() 

Meine Haupt Hilfe 15 Jahre alter Artikel gefunden war here.

Auch viele Tutorials verwenden s.server_forever(), die ein echter Schmerz ist, sauber ohne Multithreading gestoppt werden.

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

Beispiel:

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

Und das ist es

mit dem Server alles, was Sie ist im Grunde zwei Linien tun müssen, kommunizieren! Voll funktionsfähige, schnelle und zuverlässige Kommunikation. Ich bin mir bewusst, dass es immer einige Verbesserungen zu tun gibt, aber in den meisten Fällen wird dieser Ansatz einwandfrei funktionieren.