python - Popen 与 PIPE 通信无法捕获进程的所有输出

标签 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'...

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

最诚挚的问候, 丹尼尔

最佳答案

因为它们被写入 stderr ,不是标准输出。尝试一下

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)

关于python - Popen 与 PIPE 通信无法捕获进程的所有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647106/

相关文章:

python - 如何在 SQLAlchemy 模型中获取列和值字典?

python - 在 PayPal REST API 中,如何从新执行的账单协议(protocol)中获取付款人信息?

python - LightGBM 错误 - 长度与数据不同

python - Zipfile 模块错误 : File is not a zip file

ruby - 讨论一个子进程,将 Ruby 与 IO 和线程一起使用

c - Bash 扩展在 popen 中不起作用

linux - 如何循环传输管道中的数据?

bash - 在包装 bash 脚本中设置管道

android - 如何使管道符号或 Grep 在 Android 进程运行时命令中工作?

python - 使用 stdout Popen 捕获 sqoop 日志