首頁 >後端開發 >Python教學 >如何在 Python 中即時串流處理輸出?

如何在 Python 中即時串流處理輸出?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 04:15:29656瀏覽

How to Stream Process Output in Real-Time in Python?

進程執行過程中的連續輸出顯示

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

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