我發現很多類似的問題在Python中運行時詢問對象的大小。一些答案建議設置子進程的內存量限制。我不想限制子進程的內存。這是我想要的 -Python - 數據subprocess.Popen的限制數量可以產生
我使用subprocess.Popen()
執行外部程序。完成後,我可以很好地獲得標準輸出並輸入process.stdout.readlines()
和process.stderr.readlines()
。
我有一個問題,當一個錯誤的程序進入無限循環並不斷產生輸出。由於subprocess.Popen()
將輸出數據存儲在內存中,所以無限循環會迅速消耗整個內存並且程序變慢。
一個解決方案是我可以在超時運行命令。但是程序需要不同的時間才能完成。對於節目花費時間很短並且具有無限循環的節目來說,超時時間太長,使得它失去了目的。
有什麼簡單的方法,我可以把一個上限說200MB上的命令可以產生的數據量?如果超過限制命令應該被殺死。
一旦管道緩衝區已滿,子進程不會減慢速度。它會完全停止,直到您讀取數據。如果您需要同時讀取多個管道,那麼您可以使用線程或'select'或'fcntl'模塊來讀取管道而不會阻塞。 – jfs 2014-02-24 04:02:31