簡體   English   中英

設置標准輸出時,調用subprocess.call掛起

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM