Kontinuierliche Ausgabeanzeige während der Prozessausführung
In Python-Skripten verwenden wir häufig Unterprozesse, um externe Programme auszuführen. Obwohl dies eine leistungsstarke Funktion ist, kann es frustrierend sein, auf den Abschluss eines Prozesses zu warten, bevor die Ausgabe abgerufen wird. Um dieses Problem anzugehen, untersuchen wir eine Methode zum kontinuierlichen Streamen der Prozessausgabe während der Ausführung.
Traditionell verwenden wir subprocess.communicate(), um die gesamte Ausgabe eines Prozesses zu erfassen, sobald dieser abgeschlossen ist. Bei diesem Ansatz muss der Prozess jedoch vollständig abgeschlossen sein, bevor eine Ausgabe angezeigt werden kann.
Um eine kontinuierliche Ausgabe zu ermöglichen, können wir die Iter-Funktion in Verbindung mit fd.readline() nutzen. Dies ermöglicht es uns, den Stdout-Stream des Prozesses zu durchlaufen und Zeilen zu erfassen, sobald sie verfügbar werden:
<code class="python">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>
In dieser erweiterten Version geben wir jede Stdout-Zeile aus, sobald sie verfügbar wird. Dadurch kann das Skript die Ausgabe kontinuierlich anzeigen, während sie vom Prozess generiert wird.
Hier ist ein anschauliches Beispiel:
<code class="python">for path in execute(["locate", "a"]): print(path, end="")</code>
Mit diesem Ansatz können wir kontinuierlich die Pfade anzeigen, die zur Suchabfrage passen „a“, wenn sie vom Befehl „locate“ gefunden werden, und geben Echtzeit-Feedback über den Fortschritt des Prozesses.
Diese Technik ermöglicht eine kontinuierliche Ausgabeüberwachung und verbessert so die Interaktivität und Benutzererfahrung von Skripten externe Prozesse starten.
Das obige ist der detaillierte Inhalt vonWie streame ich die Prozessausgabe in Echtzeit in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!