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

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

Barbara Streisand
Barbara Streisand原創
2024-12-15 05:56:09442瀏覽

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

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