進程執行過程中的連續輸出顯示
在Python腳本中,我們經常利用子進程來執行外部程式。雖然這是一個強大的功能,但在檢索其輸出之前等待進程完成可能會令人沮喪。為了解決這個問題,讓我們探索一種在進程運行時連續串流傳輸進程輸出的方法。
傳統上,我們使用 subprocess.communicate() 來捕捉進程完成後的整個輸出。但是,這種方法要求在顯示任何輸出之前完全完成該過程。
為了啟用連續輸出,我們可以將 iter 函數與 fd.readline() 結合使用。這允許我們迭代進程的 stdout 流,捕獲可用的行:
<code class="python">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>
在此增強版本中,我們在 stdout 可用時產生每一行。這允許腳本在流程生成時連續顯示輸出。
這是一個說明性範例:
<code class="python">for path in execute(["locate", "a"]): print(path, end="")</code>
使用這種方法,我們可以連續顯示與搜尋查詢相符的路徑“a”,因為它們是透過“locate”命令找到的,提供有關過程進度的即時回饋。
此技術允許持續輸出監控,增強腳本的互動性和使用者體驗啟動外部流程。
以上是如何在 Python 中即時串流處理輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!