是否有一種簡單的方式來收集子進程的輸出而不實際等待呢?在Python中收集子進程輸出非阻塞
我可以考慮創建一個subprocess.Popen()
捕獲它的標準輸出,然後調用p.communicate()
,但這會阻塞,直到子進程終止。
我能想到使用subprocess.check_output()
或類似的,但也會阻止。
我需要一些東西,我可以開始,然後做其他的東西,然後檢查子進程是否被終止,如果是,則取其輸出。
我能想到的兩個較爲複雜的方式來實現這一目標:
- 將輸出重定向到一個文件,然後終止後我可以讀取該文件的輸出。
- 實現並啓動一個處理線程(!),它不斷嘗試從子進程的stdout讀取數據並將其添加到緩衝區。
第一個需要臨時文件和磁盤I/O,我不喜歡在我的情況。第二個意思是實現相當多。
我想可能有一種我現在還沒有想到的更簡單的方法,或者在某些我還沒有找到的庫中使用現成的解決方案。
「進程中的一個線程」的方法並不複雜。你需要一個例子嗎? –