Unterprozessausgabe streamen, während der Prozess ausgeführt wird
In Python wird die Methode „execute()“ häufig zum Ausführen externer Befehle verwendet. Standardmäßig wartet es jedoch, bis der Prozess abgeschlossen ist, bevor die kombinierte stdout- und stderr-Ausgabe zurückgegeben wird. Dies kann für Prozesse mit langer Laufzeit unerwünscht sein.
Um das Drucken der Prozessausgabe in Echtzeit zu ermöglichen, können Sie die Leistungsfähigkeit von Iteratoren und die Option universal_newlines von Python nutzen. Betrachten Sie dieses Beispiel:
<code class="python">from __future__ import print_function # Only Python 2.x import subprocess def execute(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) for stdout_line in iter(popen.stdout.readline, ''): yield stdout_line popen.stdout.close() return_code = popen.wait() if return_code: raise subprocess.CalledProcessError(return_code, cmd)</code>
Diese erweiterte Funktion „execute()“ startet den Prozess mit Popen und stellt sicher, dass stdout weitergeleitet wird und Zeilenumbrüche automatisch verarbeitet werden (universal_newlines=True). Anschließend wird ein Iterator (iter(popen.stdout.readline, '')) verwendet, um stdout Zeile für Zeile zu durchlaufen.
Dieser Ansatz ermöglicht es Ihnen, die Ausgabe des Prozesses zu streamen, sobald sie in einer Schleife verfügbar wird Sie können den Fortschritt in Echtzeit anzeigen oder entsprechend auf Zwischenausgaben reagieren.
Das obige ist der detaillierte Inhalt vonWie kann ich die Ausgabe von Unterprozessen in Python in Echtzeit streamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!