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!