Ich versuche, das subprocess
-Modul in Python zu verwenden, um mit einem Prozess zu kommunizieren, der die Standardeingabe liest und die Standardausgabe streamingweise schreibt. Ich möchte, dass der Unterprozess Zeilen von einem Iterator liest, der die Eingabe erzeugt, und dann Ausgabelinien vom Unterprozess liest. Es kann keine Eins-zu-Eins-Entsprechung zwischen Eingangs- und Ausgangsleitungen geben. Wie kann ich einen Subprozess von einem beliebigen Iterator füttern, der Strings zurückgibt?
Hier ist ein Beispielcode, der einen einfachen Testfall liefert, und einige Methoden, die ich ausprobiert habe, die aus irgendeinem Grund nicht funktionieren:
%Vor%Wie kann ich also meinen Unterprozess zeilenweise von einem Iterator lesen lassen, während ich Zeile für Zeile von seinem Ausgangspunkt ablese?
Der einfachste Weg scheint zu sein, den Eingabehandle aus dem Child-Prozess zu forchen und zu füttern. Kann irgendjemand irgendwelche möglichen Nachteile dieses Vorgehens erklären? Oder gibt es Python-Module, die es einfacher und sicherer machen?
%Vor%Folgen Sie diesem Rezept . Es ist ein Add -auf Subprozess, der asynchrone E / A unterstützt. Dies erfordert jedoch weiterhin, dass Ihr Unterprozess auf jede Eingabezeile oder Zeilengruppe mit einem Teil seiner Ausgabe reagiert.
Tags und Links python io subprocess