我有这个程序,它在控制台上执行时如下:
prog 1> output 2> error
是否有效输出和错误。但是,当我使用子进程模块执行相同的程序时。
p = subprocess.Popen(['prog'],stdout=PIPE, stderr=PIPE,close_fds=True)
out, err = p.communicate()
出局是空的,但错误是正确的。这可能发生什么? 我可以做一个os.system并直接输出和错误。但直到最近我才一直依赖子进程。
可能是什么问题?这只是在Linux上试用。不在Windows上。 `
答案 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?