Popen与PIPE沟通并不能捕获所有流程输出

时间:2011-10-04 11:21:27

标签: python pipe popen python-2.7

我正在尝试运行python脚本并捕获它的输出。它似乎在第一个输出行之后重定向到控制台而不是我的字符串。 Manage.py是一个用于管理Django项目的命令行实用程序,如启动生产服务器或运行单元测试。

这是我的代码:

import os, string, datetime
from subprocess import Popen, PIPE

def runProcess(command, parameters):
    process =  Popen([command]+parameters, stdout=PIPE)
    output=process.communicate()[0]
    return output

testStatus=runProcess('python',['manage.py','test','coffeebean'])

print ("*****Own output*****")
print(testStatus)

这是输出:

Ran 1 test in 0.000s

OK
*****Own output*****
Creating test database for alias 'default'...
Destroying test database for alias 'default'...

为什么第一行没有被捕获?

祝你好运, 丹尼尔

1 个答案:

答案 0 :(得分:3)

因为它们被写入stderr,而不是stdout。尝试

def runProcess(command, parameters):
    process = Popen([command]+parameters, stdout=PIPE,stderr=PIPE)
    return process.communicate()

out,err =runProcess('python',['manage.py','test','coffeebean'])

print ("*****Own output*****")
print(out)
print ("*****Own error output*****")
print(err)