Popen与PIPE通信未捕获进程的所有输出

2 投票
1 回答
2365 浏览
提问于 2025-04-17 03:38

我正在尝试运行一个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 个回答

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)

撰写回答