Wie erreicht man eine Echtzeitausgabe eines Unterprozesses in Python?

Barbara Streisand
Freigeben: 2024-11-14 16:17:02
Original
442 Leute haben es durchsucht

How to Achieve Real-Time Output from Subprocess in Python?

Echtzeitausgabe mit Unterprozess

Beim Versuch, ein Wrapper-Skript mit einer Fortschrittsanzeige zu erstellen, sind Sie auf eine Herausforderung gestoßen, bei der die Ausgabe vom Wrapper abgebrochen wurde Das Programm wurde trotz Verwendung von subprocess.Popen mit stdout=PIPE gepuffert. Wie Sie festgestellt haben, wurde das Problem weder durch Setzen von bufsize auf 1 oder 0 noch durch die Verwendung einer Ausgabeschleife gelöst.

Lösung: Verwendung von readline

Zufälligerweise sind wir auf eine Problemumgehung gestoßen: unter Verwendung der readline-Methode der stdout-Pipe. Im Gegensatz zur for-Schleifenmethode, die Sie ursprünglich verwendet haben und die aggressiv puffert, zeigt die mit readline erweiterte while True-Schleife das gewünschte Verhalten.

<br>while True:<br> line = p.stdout. readline()<br> wenn nicht line: break<br> ...<br>

Grundlegendes Problem

Dieses Problem ist auf einen bekannten Fehler in Python zurückzuführen, der als Problem 3907 verfolgt wird. Die spezifische Ursache von Die anomale Pufferung ist nicht gut verstanden.

Fazit

Durch die Nutzung der Readline-Methode können Sie eine Echtzeitausgabe von über Unterprozesse gestarteten Programmen erreichen, ohne auf veraltete oder möglicherweise unsichere Techniken wie exec* zurückgreifen zu müssen . Diese Problemumgehung bleibt in Python-Versionen nach 3.x wirksam und gewährleistet so die Aufwärtskompatibilität.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine Echtzeitausgabe eines Unterprozesses 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage