Popen Communicate with PIPE не отлавливает весь вывод процесса - PullRequest
2 голосов
/ 04 октября 2011

Я пытаюсь запустить скрипт на 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 голосов
/ 04 октября 2011

Потому что они записаны в 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)
...