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
Patricia ArquetteOriginal
2025-01-01 00:30:19865Durchsuche

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

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='')

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!

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