2011-10-04 63 views
1

我想運行一個python腳本並捕獲它的輸出。它似乎是在第一個輸出行後重定向到控制檯而不是我的字符串。 Manage.py是一個用於管理Django項目的命令行工具,如啓動生產服務器或運行單元測試。Popen與PIPE通信不會捕獲所有輸出的進程

這是我的代碼:

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

爲什麼第一線不是逮住?

最好的問候, 丹尼爾

+0

丹尼爾,這將是有幫助的manage.py(希望一個非常簡單的版本這個問題)和你的預期輸出。 – jhclark

+0

對不起,我忘了提及這是一個Django項目。 Manage.py是一個用於管理django項目的命令行工具。我會編輯我原來的帖子 – DkM

回答

3

,因爲他們寫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) 
+0

完美!有道理:)謝謝。 – DkM