在 Python 中,子進程模組提供了一種與系統命令交互的強大方法。然而,在處理產生大量輸出的嘈雜命令時,有效捕獲此輸出並逐行顯示它可能具有挑戰性。
一個常見的方法是在 proc.stdout 中使用 for 行迭代器讀取子程序的輸出。然而,正如問題所強調的,這種方法可能會導致緩衝,從而導致輸出延遲顯示。
為了克服這個緩衝問題,解決方案在於利用 proc.stdout 物件的 readline() 方法。此方法允許我們逐行讀取子流程的輸出(當它可用時)。以下是包含 readline() 方法的更新程式碼片段:
import subprocess proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE) while True: line = proc.stdout.readline() if not line: break # Perform filtering or other operations on the line as needed print("test:", line.rstrip())
在這個修改後的腳本中,我們進入一個連續循環,使用 readline() 重複讀取子程序的標準輸出。只要有可用的輸出,循環就會繼續,並在收到時列印每一行。這確保了輸出以非阻塞的方式顯示,為使用者提供即時更新。
要注意的是,此解仍然留有潛在的空間緩衝問題取決於子程序的配置。例如,如果子進程的輸出被大量緩衝,一些延遲可能仍然是不可避免的。為了解決這個問題,可能需要調整子程序的緩衝設定或採用其他策略,例如手動刷新輸出緩衝區。
以上是如何在 Python 中捕捉子進程的非阻塞輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!