Heim > Backend-Entwicklung > Python-Tutorial > Wie streame ich die Ausgabe eines Unterprozesses Zeile für Zeile in Python?

Wie streame ich die Ausgabe eines Unterprozesses Zeile für Zeile in Python?

DDD
Freigeben: 2024-12-13 19:47:18
Original
712 Leute haben es durchsucht

How to Stream Subprocess Output Line by Line in Python?

Unterprozessausgabe Zeile für Zeile streamen

Beim Umgang mit lauten Linux-Dienstprogrammen, die über einen Unterprozess in Python aufgerufen werden, effizientes Erfassen der Ausgabe sowohl in einer Protokolldatei und es dem Benutzer anzuzeigen kann eine Herausforderung sein.

Die Problem:

Anfangs versuchte ein Python-Skript, die Ausgabe von Unterprozessen mit dem folgenden Code zu erfassen:

for line in proc.stdout:
    # Filter output here
    print("test:", line.rstrip())
Nach dem Login kopieren

Dieser Ansatz zeigte jedoch nicht das gewünschte Verhalten des zeilenweisen Streamens der Ausgabe Linie. Stattdessen erschien die Ausgabe erst, nachdem eine erhebliche Menge generiert wurde.

Die Lösung:

Das Problem liegt in der Verwendung des Iterators für Zeile in proc.stdout. Dadurch wird die gesamte Ausgabe im Voraus gelesen. Um dieses Problem zu beheben, sollte stattdessen readline() verwendet werden:

# Filter output
import subprocess

proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if not line:
        break
    # Filter output here
    print("test:", line.rstrip())
Nach dem Login kopieren

Mit dieser Änderung wird die Ausgabe nun Zeile für Zeile wie gewünscht gestreamt.

Überlegungen zur Pufferung:

Es ist wichtig zu beachten, dass der Unterprozess möglicherweise weiterhin die Ausgabe puffert. Um dies zu bewältigen, sind möglicherweise die Flush-Methode oder andere Techniken erforderlich, um eine rechtzeitige Anzeige der Ausgabe sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie streame ich die Ausgabe eines Unterprozesses Zeile für Zeile in Python?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage