subprocess无法捕获STDOUT - 程序可以做什么?

时间:2010-07-29 05:02:30

标签: python

我有这个程序,它在控制台上执行时如下:

prog  1> output 2> error

是否有效输出和错误。但是,当我使用子进程模块执行相同的程序时。

p = subprocess.Popen(['prog'],stdout=PIPE, stderr=PIPE,close_fds=True)
out, err = p.communicate()

出局是空的,但错误是正确的。这可能发生什么? 我可以做一个os.system并直接输出和错误。但直到最近我才一直依赖子进程。

可能是什么问题?这只是在Linux上试用。不在Windows上。 `

2 个答案:

答案 0 :(得分:1)

你在Windows上尝试这个吗?

使用close_fds是 依赖于平台,根据subprocess.Popen() doc

  

如果close_fds为真,则在执行子进程之前将关闭除0,1和2之外的所有文件描述符。 (仅限Unix)。或者,在Windows上,如果close_fds为true,则子进程不会继承任何句柄。 请注意,在Windows上,您不能将close_fds设置为true,还可以通过设置stdin,stdout或stderr 来重定向标准句柄。

答案 1 :(得分:0)

刚试过你的代码并为我工作:

>>> p = subprocess.Popen(['ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
 close_fds=True)
>>> out, err = p.communicate()
>>> out
'build\nCode\n...'
>>> err
''

a)确保您的程序被正确调用。

b)您是否正确导入了PIPE?