Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich eine Live-Ausgabe von einem Unterprozessbefehl in Python erhalten?

Wie kann ich eine Live-Ausgabe von einem Unterprozessbefehl in Python erhalten?

DDD
DDDOriginal
2024-12-03 08:52:09340Durchsuche

How Can I Get Live Output from a Subprocess Command in Python?

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!

Stellungnahme:
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