Interceptação em tempo real de stdout de outro processo em Python

Eu gostaria de executar um processo do sistema, interceptar a saída e modificá-lo em tempo real, linha por linha, em um script Python.

Minha melhor tentativa, que aguarda a conclusão do processo antes da impressão, é:

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

O roteirowaitsome.py simplesmente imprime uma linha a cada meio segundo:

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

Existe uma solução fácil para obtersubprocess permitir iterar sobre a saída em tempo real? Eu tenho que usar threads?

Era uma vez, eu escrevi em Perl, e isso foi um pedaço de bolo:

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

questionAnswers(2)

yourAnswerToTheQuestion