[英]How do I redirect stdout to a file when using subprocess.call in python?
[英]Calling subprocess.call hangs when I set the stdout
我有一個我稱之為progarm的函數,帶有一些args,想要得到結果。
當我使用以下
proc = subprocess.call(["fetch.py", "--cookies=/tmp/tmp-cookies"], stdout=PIPE, stderr=PIPE)
stdout, stderr = proc.communicate()
return stdout
該應用程序只是掛起。 但是如果我跑步
return subprocess.call(["fetch.py", "--cookies=/tmp/tmp-cookies"])
然后將輸出顯示在屏幕上,應用程序運行正常,但是我需要將輸出轉換為函數。
我正在使用python 2.6.1,並且無法使用check_output
正如規范所說,
請勿將此功能與stdout = PIPE或stderr = PIPE一起使用。 由於在當前進程中未讀取管道,因此子進程如果向管道生成足夠的輸出以填滿OS管道緩沖區,則子進程可能會阻塞。
相反,您需要的是subprocess.Popen
:
proc = subprocess.Popen(["fetch.py", "--cookies=/tmp/tmp-cookies"],
stdout=PIPE, stderr=PIPE)
stdout, stderr = proc.communicate()
return stdout
(此外, subprocess.call
不會返回流程對象,只會退出狀態)
在通信完成之前,您的子進程必須先讀取其stdin,並且主進程可以繼續。 解決方法將在線程中寫出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.