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.
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