Ich möchte einen Systemprozess laufen lassen, die Ausgabe abfangen und sie in einem Python-Skript Zeile für Zeile in Echtzeit ändern.
Mein bester Versuch, bei dem vor dem Drucken gewartet wird, bis der Vorgang abgeschlossen ist, ist folgender:
#!/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 Drehbuch waitsome.py
druckt einfach alle 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, um die subprocess
um eine Iteration über die Ausgabe in Echtzeit zu ermöglichen? Muss ich Threads verwenden?
Früher habe ich Skripte in Perl geschrieben, und das war ein Kinderspiel:
open(CMD, "waitsome.py |");
while (<CMD>) {
print ">>> $_";
}
close(CMD);
0 Stimmen
Duplikat: stackoverflow.com/search?q=%5Bpython%5D+subprocess+real-time und zwar stackoverflow.com/questions/527197/ , stackoverflow.com/questions/803265/ ,
0 Stimmen
Entschuldigung, ich habe nur den ersten gesehen und dachte, es handele sich um ein Problem mit dem Unterprozess Pufferung, nicht die des übergeordneten Python-Skripts.