ich habe ein Problem mit der stdin Pipe bei dem Modul subprocess.
Ich habe ein Python Modul welches ein anderes Modul über einen subprocess startet und ihm über die stdin PIPE benötigte Daten mitgibt.
Danach möchte ich den subprocess steuern können; was soll er machen.
Ich habe schon an eine Austauschdatei gedacht, in die der Hauptprocess
etwas schreibt, was der subprocess ausliest. Diese Lösung ist aber sicher
nicht die eleganteste.
Deswegen wollte ich es über die stdin Pipe versuchen.
Allerdings kann ich nach process.stdin.close() keine Daten mehr über die Pipe schicken.
Außerdem scheint der subprocess die Daten nur beim Programmende
auszuwerten und nicht direkt nach dem Senden.
Deswegen habe ich quasi schon an selbstgemachte EOF Zeichen, wie eine Raute gedacht, weiß aber nicht ob das funktioniert.
Um das ganze zu verdeutliche, ein kleines Beispiel:
Code: Alles auswählen
# Hauptprocess
.
.
Args = [Dictionary, Daten, nochMehrDaten]
ArgsPickled = cPickle.dumps(Args)
process = subprocess.Popen((sys.executable, "sub.py"), stdin = subprocess.PIPE)
# send arguments to the subprocess
process.stdin.write(ArgsPickled)
process.stdin.close()
process.stdin.write("Connect")
process.stdin.close()
time.sleep(5)
process.stdin.write("Start")
process.stdn.close()
.
.
Code: Alles auswählen
# Subprocess
import time
import sys
import cPickle
def Start(self):
return
def Connect(self):
return
_Args = []
if __name__ == "__main__":
ArgsPickled = sys.stdin.read()
Args = cPickle.loads(Temp)
_Args = Args
while True:
Args = sys.stdin.read()
if Args == "Connect":
Connect()
elif Args == "Start":
Start()
time.sleep(5)