Heim > Backend-Entwicklung > Python-Tutorial > Wie streame ich die Ausgabe von Unterprozessen in Echtzeit mit Pythons „subprocess.communicate()'?

Wie streame ich die Ausgabe von Unterprozessen in Echtzeit mit Pythons „subprocess.communicate()'?

Patricia Arquette
Freigeben: 2025-01-01 00:30:19
Original
833 Leute haben es durchsucht

How to Stream Subprocess Output in Real-time using Python's `subprocess.communicate()`?

Streaming-Ausgabe von subprocess.communicate()

In Python wird subprocess.communicate() verwendet, um stdout aus einem Prozess zu lesen, der ausgeführt wird Ein längerer Zeitraum kann problematisch sein. Die resultierende Ausgabe wird auf einmal empfangen, was die Echtzeitanzeige behindert.

Um dies zu umgehen, ist es möglich, jede Zeile der Standardausgabe so auszudrucken, wie sie generiert wird, und gleichzeitig sicherzustellen, dass der Prozess beendet wird, bevor fortgefahren wird:

Python 2

#!/usr/bin/env python2
from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line)
p.wait()  # Wait for subprocess termination
Nach dem Login kopieren

Python 3

#!/usr/bin/env python3
from subprocess import Popen, PIPE

with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')
Nach dem Login kopieren

Dieser modifizierte Ansatz liest kontinuierlich Zeilen, während sie geschrieben werden, und umgeht dabei die Pufferverzögerung. Der Prozess behält weiterhin sein blockierendes Verhalten bei und stoppt die Ausführung bis zur Beendigung.

Das obige ist der detaillierte Inhalt vonWie streame ich die Ausgabe von Unterprozessen in Echtzeit mit Pythons „subprocess.communicate()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage