首頁  >  文章  >  後端開發  >  如何在Python中取得子程序的即時輸出?

如何在Python中取得子程序的即時輸出?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 05:49:31772瀏覽

How to Get Real-Time Output from Subprocesses in Python?

子進程的即時輸出

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

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