Echtzeitausgabe mithilfe von Subprocess abrufen
Subprocess ist ein leistungsstarkes Modul in Python, das zum Ausführen anderer Programme und zum Interagieren mit deren Eingabe und Ausgabe verwendet wird. Benutzer können jedoch auf ein Szenario stoßen, in dem sie die Ausgabe des ausgeführten Programms in Echtzeit und ohne Pufferung abrufen müssen.
Problembeschreibung
Das Problem tritt bei der Verwendung auf subprocess.Popen mit stdout als Pipe festgelegt. Die Ausgabe des umschlossenen Programms scheint gepuffert zu sein, was zu Datenblöcken und nicht zu einer zeilenweisen Übermittlung führt. Das Festlegen des bufsize-Parameters auf 1 oder 0 löst das Problem nicht.
Lösung: Iteratives Lesen von readline()
Trotz des oben genannten Unterprozessverhaltens das folgende Codefragment Ruft die Ausgabe effektiv in Echtzeit ab:
while True: line = p.stdout.readline() if not line: break ...
Die Verwendung von readline() anstelle der Iteration über p.stdout umgeht direkt das Pufferungsproblem und ermöglicht den Ausgabeabruf in Echtzeit.
Das obige ist der detaillierte Inhalt vonWie erhalte ich eine Echtzeitausgabe von Subprocess.Popen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!