我正在使用python代碼啓動腳本。此代碼應啓動在磁盤上寫入文件的腳本,然後等待腳本完成。Popen有限緩衝區
但是,無論何時使用python啓動此腳本,結果文件不會超過65768字節,並且腳本不再響應。以下是我在python中使用的內容:
p = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
bufsize=-1)
p.wait()
其中command是腳本的命令。
有沒有人知道這個問題的解決方案?
謝謝。
該腳本是否也迴應(如冗長的東西,如寫入文件的副本)到標準輸出?事實上,你並沒有閱讀孩子的標準輸出,所以如果它在某個時候變滿了,孩子將停止一切(掛在例如'print'語句上),包括寫入它的輸出文件。 – Tibo
@OneOfOne:它不是重複的。這個問題不是關於'MemoryError';這是由於完整的管道緩衝區造成的死鎖。 – jfs
如果你不需要子進程的標準輸出,那麼你可以將它重定向到devnull:'import os; DEVNULL = open(os.devnull,'wb'); subprocess.check_call([script],stdout = DEVNULL,stderr = STDOUT)' – jfs