Ich versuche gerade eine Progress Anzeige für ffmpeg zu erstellen. Dabei öffne ich einen Subprocess und durchlaufe eine Schleife solange der Prozess läuft. Jetzt möchte ich die Ausgabe von ffmpeg dazu nutzen, dem User Feedback über den Fortschritt der Konvertierung zu geben.
Ich könnte den Fortschritt bei jedem Schleinfendurchgang aktualisieren, habe mir aber gedacht, es ist performanter wenn ich nur jede Sekunde einmal aktualisiere.
Das Problem mit der Lösung wie ich sie jetzt habe ist, dass das wait() scheinbar auch den Subprozess ausbremst oder zumindest die Sdtout nicht mehr in Realtime erhält. So wie es ausschaut, geht die while Schleife wirklich jede Zeile aus dem Stdout durch und holt sich nicht die aktuellste (letzte) Zeile.
Ich wäre für jeden Tipp dankbar!
Code: Alles auswählen
p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,\
universal_newlines=True,stderr=subprocess.STDOUT,stdin=None)
while p.poll() == None:
time.wait(1)
p.stdout.flush()
out = p.stdout.readline().strip()
print(out)
p.stdout.close()