首頁 >後端開發 >Python教學 >如何從 Python 中的子進程命令取得即時輸出?

如何從 Python 中的子進程命令取得即時輸出?

DDD
DDD原創
2024-12-03 08:52:09338瀏覽

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

子進程命令的即時輸出

在 Python中,您可以捕捉子進程命令的輸出,並同時使用以下命令產生即時流輸出以下方法:

使用迭代器

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)

使用FileWriter 和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())

原始程式碼重構

在您的原始程式碼,您可以在建立子流程後擷取即時輸出:如下:

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())

此方法可讓您捕捉stdout 和stderr流並列印即時輸出,同時將其寫入日誌檔案。

以上是如何從 Python 中的子進程命令取得即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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