Wie kann ich die Standardeingabe eines Subprozesses von einem Python-Iterator einspeisen?

8

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?

    
Ryan Thompson 31.07.2011, 22:05
quelle

3 Antworten

5

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%     
Ryan Thompson 01.08.2011, 00:28
quelle
2

Um die Standardeingabe eines Unterprozesses von einem Python-Iterator zu übernehmen:

%Vor%

Wenn Sie die Ausgabe gleichzeitig lesen möchten, benötigen Sie Threads oder async.io:

%Vor%     
jfs 03.01.2016 03:17
quelle
0

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.

    
Nicola Musatti 31.07.2011 22:13
quelle

Tags und Links