繁体   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