在進程執行過程中連續輸出顯示
在Python腳本中,我們經常利用子程序來執行外部程序。雖然這是一個強大的功能,但在檢索其輸出之前等待進程完成可能會令人沮喪。為了解決這個問題,讓我們探索一種在進程運行時連續串流傳輸進程輸出的方法。
傳統上,我們使用 subprocess.communicate() 來擷取流程完成後的整個輸出。然而,這種方法要求在顯示任何輸出之前完全完成該過程。
為了啟用連續輸出,我們可以將 iter 函數與 fd.readline() 結合使用。這允許我們迭代進程的標準輸出流,捕獲可用的行:
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)
在此增強版本中,我們在 stdout 可用時產生每一行。這允許腳本連續顯示進程產生的輸出。
這是一個說明性範例:
for path in execute(["locate", "a"]):
print(path, end="")
使用這種方法,我們可以連續顯示透過「locate」指令找到的與搜尋查詢「a」相符的路徑,從而提供即時回饋流程的進度。
此技術允許連續輸出監控,增強啟動外部流程的腳本的互動性和使用者體驗。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3