Ich muss einen externen Prozess starten, der über Nachrichten gesteuert werden soll, die über stdin und stdout hin- und hergeschickt werden. Mit subprocess.Popen kann ich den Prozess starten, aber ich kann die Ausführung nicht wie gewünscht über stdin steuern.Starten und Steuern eines externen Prozesses über STDIN/STDOUT mit Python
Die Strömung von dem, was ich versuche, zu vollenden ist: der externen Prozess
- Starten Sie den externen Prozess
- Iterate für eine bestimmte Anzahl von Schritten
- Sagen Sie die nächste Verarbeitung abzuschließen Schritt durch Schreiben eines neuen Zeilenzeichens in die Standardeingabe
- Warten Sie, bis der externe Prozess signalisiert, dass der Schritt abgeschlossen ist, indem Sie ein neues Zeilenzeichen in den stdout schreiben
- Schließen Sie die Standardeingabe des externen Prozesses, um dem externen Prozess anzuzeigen, dass die Ausführung abgeschlossen ist.
process=subprocess.Popen([PathToProcess],stdin=subprocess.PIPE,stdout=subprocess.PIPE); for i in xrange(StepsToComplete): print "Forcing step # %s"%i process.communicate(input='\n')
Wenn ich führen Sie den obigen Code der ‚\ n‘ ist nicht auf den externen Prozess mitgeteilt, und ich nie über Schritt # 0 erhalten:
Ich habe mit den folgenden so weit kommen . Der Code blockiert bei process.communicate() und geht nicht weiter. Ich verwende die Methode communicate() falsch?
Wie würde ich auch die Funktion "Warten, bis der externe Prozess eine neue Zeile schreibt" implementieren?
Etwas, das mich bei der ersten Sache gebissen hat, war, dass wenn Sie nur ein paar Zeichen senden, müssen Sie möglicherweise die Streams spülen, bevor etwas übertragen wird. – Kiv