2013-04-25 18 views
7

eine Methodik Frage:Kommunikation zwischen zwei Python-Skripte

Ich habe einen „main“ Python-Skript, das auf meinem System auf eine Endlosschleife läuft, und ich mag Informationen, um es senden (eine json Datenfolge zum Beispiel) gelegentlich mit einigen anderen Python-Skripten, die später von mir selbst oder einem anderen Programm gestartet werden und unmittelbar nach dem Senden der Zeichenfolge enden.

Ich kann den Subprozess hier nicht verwenden, weil mein Hauptscript nicht weiß, wann der andere ausgeführt wird und welcher Code ausgeführt wird.

Ich denke daran, dass das Hauptskript einen lokalen Port abhört und die anderen Skripts die Strings an diesen Port sendet, aber gibt es einen besseren Weg, es zu tun?

+0

Sockets ist eine Option, aber es gibt andere, je nachdem, welches Betriebssystem Sie verwenden. – Aya

Antwort

10

zeromq: http://www.zeromq.org/ - ist beste Lösung für die Interprozesskommunikation imho und haben eine ausgezeichnete für Python-Bindung: http://www.zeromq.org/bindings:python

+1

Ja, wirklich gute Lösung. – Denis

+0

Das ist großartig, danke! Ich wollte nicht http oder sogar tcp verwenden, weil ich dachte, dass mein Problem nicht mit Netzwerken zusammenhing, ist die IPC-Lösung mit zeromq perfekt :) – Dettorer

+0

genießen Sie Jungs! vor drei Jahren wurde es für mich eine silberne Kugel;)) –

4

Da die „main“ Skript wie ein Service sieht man es mit einem Web-API verbessern können. bottle ist die perfekte Lösung dafür. Mit diesem zusätzlichen Code Ihr ist Python-Skript der Lage, Anfragen zu empfangen und verarbeiten:

import json 

from bottle import run, post, request, response 

@post('/process') 
def my_process(): 
    req_obj = json.loads(request.body.read()) 
    # do something with req_obj 
    # ... 
    return 'All done' 

run(host='localhost', port=8080, debug=True) 

Der Client-Skript die httplib verwenden können Sie eine Nachricht an den Server zu senden und lesen Sie die Antwort:

import httplib 

c = httplib.HTTPConnection('localhost', 8080) 
c.request('POST', '/process', '{}') 
doc = c.getresponse().read() 
print doc 
# 'All done' 
+0

Wie schicke ich Anfragen an diesen Service vom Client Python-Skript? – Noah

+1

@Noah Siehe meine Ergänzungen in der Antwort – mike

1

In Falls Sie daran interessiert sind, das Client-Skript zu implementieren, das Mike in Python 3.x vorgestellt hat, werden Sie schnell feststellen, dass kein httplib verfügbar ist. Zum Glück wird das Gleiche mit der Bibliothek http.client gemacht.

Ansonsten ist es das gleiche:

import http 
c = http.client.HTTPConnection('localhost': 8080) 
c.request('POST', '/process', '{}') 
doc = c.getresponse().read() 
print(doc) 

Obwohl diese alt würde ich denke, ich würde dies schreiben, da ich eine ähnliche Frage hatte heute aber einen Server.

Verwandte Themen