首頁 > 後端開發 > Python教學 > 如何在 Python 中逐行串流子進程輸出?

如何在 Python 中逐行串流子進程輸出?

Linda Hamilton
發布: 2024-12-16 06:27:17
原創
417 人瀏覽過

How Can I Stream Subprocess Output Line by Line in Python?

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

Python 的subprocess.communicate() 函數對於捕獲進程的標準輸出對於捕獲進程的標準輸出非常有用。但是,它通常會立即返回所有輸出。這對於長時間產生輸出的流程來說可能會很不方便。為了解決這個問題,我們探索了一種以串流方式列印進程標準輸出的每一行的技術。

透過採用迭代機制,我們可以擷取行標準輸出一旦成為available:

from subprocess import Popen, PIPE

# Launch a process with buffering set to 1 byte
p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)

# Iterate over the stdout lines as they become available
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line, end='')

# Wait for the process to terminate
p.wait()
登入後複製

解釋解釋

  • 解釋
  • iter(p.stdout.readline, b''):這將建立一個迭代器,連續從 p 讀取行.stdout 以非阻塞方式。
end='':這確保了每一行都被列印而沒有尾隨換行符。

p.wait():一旦迭代器耗盡,此函數將等待進程完成後再繼續。

  • 附加說明
  • 對於 Python 2,需要 iter() 來解決預讀問題bug。
對於 Python 3,universal_newlines 選項會自動將 stdout 解碼為文字。 替代方法,例如 Pexpect 或無緩衝實用程序,也可用於強制無緩衝 stdout。

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

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