進程運行時串流傳輸子進程輸出
在 Python 中,execute() 方法通常用於執行外部命令。但是,預設情況下,它會等待進程完成,然後再傳回組合的 stdout 和 stderr 輸出。對於長時間運行的進程來說,這可能是不受歡迎的。
要啟用進程輸出的即時列印,您可以利用迭代器和 Python 的 universal_newlines 選項的強大功能。考慮這個例子:
<code class="python">from __future__ import print_function # Only Python 2.x import subprocess def execute(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) for stdout_line in iter(popen.stdout.readline, ''): yield stdout_line popen.stdout.close() return_code = popen.wait() if return_code: raise subprocess.CalledProcessError(return_code, cmd)</code>
這個增強的execute()函數使用Popen啟動進程,確保stdout透過管道傳輸並自動處理換行符號(universal_newlines=True)。然後,它使用迭代器 (iter(popen.stdout.readline, '')) 逐行遍歷 stdout。
這種方法可讓您在循環內可用時從進程中串流輸出,從而使您可以顯示即時進度或相應地回應中間輸出。
以上是如何在 Python 中即時傳輸子進程輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!