2017-08-01 71 views
1

我一直在研究Python脚本与ffmpeg进行交互;然而,我注意到,即使一切运行良好,stdout是空的,stderr返回我应该从stdout期望的东西。我如何解决它,以便输出将由标准输出返回?Python子流程返回输出为stderr

下面是再现现象最简单的例子:

from subprocess import Popen, PIPE 

p = Popen(['python', '-V'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
out, err = p.communicate() 
if out: 
    print("Output. ", out.decode()) 
else: 
    print("Error. ", err.decode()) 

这里的输出:

Error. Python 3.6.1 :: Anaconda 4.4.0 (64-bit) 

我要指出,我使用的是Windows 10

+0

你在这里有什么问题? – Xatyrian

回答

2

您可以重定向stderr通过这样做您的过程stdout

from subprocess import PIPE, STDOUT 
p = subprocess.Popen(["python", "-V"], stdout=PIPE, stderr=STDOUT) 

然后你就可以通过检索的过程中,像这样产生的输出:

out = p.stdout.read() 

你的进程已经终止后,这将返回标准输出的内容。