Echtzeit-Teilprozess.Popen, die über stdout und PIPE

Ich versuche zu greifen stdout aus einer subprocess.Popen Anruf und ich bin zwar erreichen dies problemlos tun:

cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
    print line

Ich würde gerne zu greifen stdout in "Echtzeit". Mit der oben beschriebenen Methode, ROHR, der darauf wartet, greifen Sie alle stdout - und dann kehrt er zurück.

Also für logging-Zwecke, diese nicht erfüllen meine Anforderungen (z.B. "sehen", was Los ist, während es geschieht).

Gibt es einen Weg, um Zeile für Zeile, stdout während Sie ausgeführt wird? Oder ist dies eine Einschränkung der subprocess(warten zu müssen, bis die PIPE schließt).

BEARBEITEN
Wenn ich wechseln readlines() für readline() bekomme ich nur die Letzte Zeile der stdout (nicht ideal):

In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....: 
t
o
t
a
l

1
0
4

InformationsquelleAutor der Frage alfredodeza | 2010-01-17

Schreibe einen Kommentar