我有一个函数,我称之为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
答案 0 :(得分:5)
正如spec所说,
不要将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
不返回进程对象,只退出状态)
答案 1 :(得分:0)
您的子流程必须在通信完成之前读取其stdin,并且主流程可以继续。解决方法将在一个帖子中写出来。