Abfangen von stdout in Echtzeit von einem anderen Prozess in Python

Ich möchte einen Systemprozess ausführen, die Ausgabe abfangen und in Echtzeit Zeile für Zeile in einem Python-Skript ändern.

Mein bester Versuch, der darauf wartet, dass der Vorgang abgeschlossen ist, bevor er gedruckt wird, ist:

#!/usr/bin/env python
import subprocess

cmd = "waitsome.py"
proc = subprocess.Popen(cmd, shell=True, bufsize=256, stdout=subprocess.PIPE)
for line in proc.stdout:
    print ">>> " + line.rstrip()

Das Drehbuchwaitsome.py druckt einfach jede halbe Sekunde eine Zeile:

#!/usr/bin/env python
import time
from sys import stdout

print "Starting"
for i in range(0,20):
    time.sleep(0.5)
    print "Hello, iteration", i
    stdout.flush()

Gibt es eine einfache Lösung zu bekommensubprocess in Echtzeit über die Ausgabe iterieren zu lassen? Muss ich Threads verwenden?

Es war einmal ein Skript in Perl, und das war ein Kinderspiel:

open(CMD, "waitsome.py |");
while (<CMD>) {
    print ">>> $_";
}
close(CMD);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage