Przechwytywanie stdout w czasie rzeczywistym z innego procesu w Pythonie

Chciałbym uruchomić proces systemowy, przechwycić dane wyjściowe i zmodyfikować je w czasie rzeczywistym, linia po linii, w skrypcie Pythona.

Moja najlepsza próba, która czeka na zakończenie procesu przed drukowaniem, to:

#!/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()

Scenariuszwaitsome.py po prostu drukuje linię co pół sekundy:

#!/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()

Czy istnieje łatwe rozwiązaniesubprocess aby umożliwić iterowanie wyjścia w czasie rzeczywistym? Czy muszę używać wątków?

Pewnego razu napisałem skrypt w Perlu, a to był bułka z masłem:

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

questionAnswers(2)

yourAnswerToTheQuestion