首頁 >後端開發 >Python教學 >如何在 Python 中同時擷取和顯示子進程的即時輸出?

如何在 Python 中同時擷取和顯示子進程的即時輸出?

Susan Sarandon
Susan Sarandon原創
2024-12-03 21:58:15201瀏覽

How Can I Simultaneously Capture and Display Live Output from a Subprocess in Python?

在儲存子進程命令輸出的同時列印即時輸出

使用subprocess.Popen 呼叫子進程時,我們可以同時儲存其輸出用於日誌記錄並將其實時顯示在終端。

可能的解決方案

選項1:使用迭代器

import subprocess
import sys

with open("test.log", "wb") as f:
    process = subprocess.Popen(your_command, stdout=subprocess.PIPE)
    for c in iter(lambda: process.stdout.read(1), b""):
        sys.stdout.buffer.write(c)
        f.buffer.write(c)

選項2:使用讀取器和寫入器

import io
import time
import subprocess
import sys

filename = "test.log"
with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader:
    process = subprocess.Popen(command, stdout=writer)
    while process.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())

選項3:自訂解決方案

ret_val = subprocess.Popen(run_command,
                            stdout=log_file,
                            stderr=subprocess.PIPE,
                            shell=True)
while not ret_val.poll():
    log_file.flush()

在另一個終端, run:

tail -f log.txt

使用這些方法,您可以捕捉子進程輸出,同時即時顯示它,確保日誌記錄和進度監控。

以上是如何在 Python 中同時擷取和顯示子進程的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn