„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie streame ich die Prozessausgabe in Echtzeit in Python?

Wie streame ich die Prozessausgabe in Echtzeit in Python?

Veröffentlicht am 17.11.2024
Durchsuche:244

How to Stream Process Output in Real-Time in Python?

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. Dieser Ansatz erfordert jedoch, dass der Prozess vollständig abgeschlossen ist, 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 Standard-Stream des Prozesses zu durchlaufen und Zeilen zu erfassen, sobald sie verfügbar sind:

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)

In dieser erweiterten Version geben wir jede Zeile von stdout aus, sobald sie verfügbar ist. Dadurch kann das Skript die Ausgabe kontinuierlich anzeigen, während sie vom Prozess generiert wird.

Hier ist ein anschauliches Beispiel:

for path in execute(["locate", "a"]):
    print(path, end="")

Mit diesem Ansatz können wir kontinuierlich die Pfade anzeigen, die der Suchabfrage „a“ entsprechen, sobald sie vom Befehl „locate“ gefunden werden, und so Echtzeit-Feedback liefern den Fortschritt des Prozesses.

Diese Technik ermöglicht eine kontinuierliche Ausgabeüberwachung und verbessert die Interaktivität und Benutzererfahrung von Skripten, die externe Prozesse starten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3