Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich eine Live-Ausgabe von einem Unterprozessbefehl in Python erhalten?
Live-Ausgabe eines Unterprozessbefehls
In Python können Sie die Ausgabe eines Unterprozessbefehls erfassen und gleichzeitig eine Live-Streaming-Ausgabe mit erzeugen die folgenden Ansätze:
Verwendung eines Iterator
import subprocess import sys p = subprocess.Popen(['command'], stdout=subprocess.PIPE) for line in iter(lambda: p.stdout.readline(1), ''): sys.stdout.buffer.write(line)
Verwendung eines FileWriter und FileReader
import io import time import subprocess import sys log = 'test.log' with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader: p = subprocess.Popen(['command'], stdout=writer) while p.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
Originalcode-Refactoring
In Ihrem Mit dem Originalcode können Sie die Live-Ausgabe nach dem Erstellen eines Unterprozesses als erfassen folgt:
ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() for line in iter(lambda: ret_val.stdout.readline(1), ''): if line: print(line) log_file.write(line.decode())
Mit dieser Methode können Sie sowohl die stdout- als auch die stderr-Streams erfassen und die Live-Ausgabe drucken, während Sie sie gleichzeitig in eine Protokolldatei schreiben.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Live-Ausgabe von einem Unterprozessbefehl in Python erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!