2017-04-12 6 views
0

Ich habe ein Python-Programm, das eine andere ausführbare Datei als Unterprozess beginnt. Der Unterprozess wiederum startet einen XML-RPC-Server, mit dem der übergeordnete Prozess als Client verbunden wird.xmlrpc - dynamisch Auswahl Portnummer

Ich möchte die Portnummer nicht reparieren, da der Port manchmal nicht verfügbar ist, weil eine andere Instanz desselben Programms auf demselben Computer ausgeführt wird.

Ich kann es an den Eltern-Prozess verlassen die Portnummer zu wählen und diese Informationen als Argument oder durch Unix-Umgebungsvariable übergeben.

Aber im schlimmsten Fall gibt es eine Möglichkeit, dass die Port-Nummer aus der Zeit Eltern nicht verfügbar wurde geprüft und dann versucht, Unter proc zu erwerben.

Wir können den Unterprozess zuerst die Portnummer erhalten und sie dann dem Elternteil mitteilen. Der Unterprozess druckt eine große Menge an Daten, die in eine Datei umgeleitet werden. Gibt es einen besseren Weg, als den stdout analysieren zu müssen? etwas wie die Unix Env-Variable, aber die Umgebung des Aufrufers ändern.

Eine andere Möglichkeit besteht darin, dass der Elternteil einen xml-rpc-Server hat und die Adresse an den Unterprozess weiterleitet. Der Sub-Proc würde einen Anruf tätigen und mitteilen, was seine Serveradresse ist.

Gibt es einen besseren Weg?

Antwort

1

Nicht sicher, dass Ihr Betriebssystem, wenn es ubuntu ist, dann könnte Ihre Eltern den Hafen finden von Kind processid und netstat verwenden.

netstat -antlp | grep processid 

Eine weitere Möglichkeit, durch Lesen aus dem Teilprozess stdout:

#parent 
import subprocess 

proc=subprocess.Popen(['./test_python_xmlrpc_server.py'], stdout=subprocess.PIPE,close_fds=True) 

line = proc.stdout.readline() 
print line 

Und das Kind Prozess:

#!/usr/bin/python  
#./test_python_xmlrpc_server.py 
from SimpleXMLRPCServer import SimpleXMLRPCServer 

server = SimpleXMLRPCServer(("0.0.0.0", 0)) #pick a free port 
print server.server_addres 
# 
# 

REF:

How to kill a process on a port on ubuntu

Stop reading process output in Python without hang?

xmlrpc getting auto-assigned server port number