Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Ausgabe von Unterprozessen in Python in Echtzeit streamen?

Wie kann ich die Ausgabe von Unterprozessen in Python in Echtzeit streamen?

DDD
DDDOriginal
2024-10-28 20:51:30542Durchsuche

How Can I Stream Subprocess Output in Real Time in Python?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn