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

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

Susan Sarandon
發布: 2024-12-03 21:58:15
原創
124 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板