子進程的即時輸出
在Python中,子進程模組提供了執行外部程式的便利方法。但是,預設情況下,它捕獲程式的所有輸出並在進程完成後返回它。這對於長時間運行的進程來說可能會出現問題。
引入迭代輸出輪詢
要解決這個問題,您可以利用 iter() 函數逐行檢索輸出當命令產生它時。以下是實現此方法的執行()函數的修改版本:
<code class="python">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>
使用範例
您現在可以迭代該過程的輸出,因為它變成可用:
<code class="python">for path in execute(["locate", "a"]): print(path, end="")</code>
此範例將在搜尋檔案時連續列印locate a指令的輸出。
輪詢間隔
雖然此方法提供即時輸出,但輪詢間隔會影響效能。 universal_newlines 參數可確保您取得文字行而不是字節,這會產生額外的開銷。若要最佳化輪詢,您可以降低檢查進程輸出的頻率。
以上是如何在Python中取得子程序的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!