首頁 > 後端開發 > Python教學 > 如何使用 Python 即時串流子進程輸出?

如何使用 Python 即時串流子進程輸出?

Barbara Streisand
發布: 2024-12-15 05:56:09
原創
441 人瀏覽過

How Can I Stream Subprocess Output in Real-Time Using Python?

來自Subprocess.communicate() 的流式輸出

當使用subprocess.communicate() 從進程中擷取輸出時,整個標準輸出(stdout)可能會立即返回,從而妨礙對輸出的即時監控。出現此問題的原因是communicate() 函數的阻塞性質。

為了解決這個問題,可以採用串流方法來列印每行可用的標準輸出。這可以透過使用迭代器並操作 Popen() 的 bufsize 參數來實現。

在Python 2 中:

from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line)
p.wait()
登入後複製

在Python 3 中,程式碼變成:

from subprocess import Popen, PIPE

with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')
登入後複製

bufsize=1 參數強制進程在每行之後刷新其輸出緩衝區,確保立即列印每行。 iter() 允許非同步讀取行,從而可以串流輸出。進程終止是透過 wait() 方法處理的。

透過使用這種串流方法,您可以即時監視長時間運行的進程的輸出,而不會影響 communications() 函數的同步性質。

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

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