2016-02-28 131 views
1

我試圖從通過python腳本執行的命令捕獲輸出。 我知道有很多關於如何做到這一點的例子,但我無法獲得解決方案。從python子進程捕獲輸出

例子:

本例使用:

#!/usr/bin/python 
import subprocess 
process = subprocess.Popen(['whoami'], stdout=subprocess.PIPE) 
stdout = process.communicate()[0] 
print 'STDOUT:{}'.format(stdout) 

結果:

[email protected]:~/Documents$ python example.py 
STDOUT:houhou 

這不起作用:

我需要運行以下命令: 'nginx的-t'

import subprocess 
process = subprocess.Popen(['nginx', '-t'], stdout=subprocess.PIPE) 
stdout = process.communicate()[0] 
print 'STDOUT:{}'.format(stdout) 

結果:

[email protected]:~/Documents$ python example.py 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
nginx: configuration file /etc/nginx/nginx.conf test is successful 
STDOUT: 

我不知道如何抓住這個輸出。看起來這個消息表明nginx配置是好的,在python可以讀取它之前打印出來。 任何幫助,將不勝感激。

乾杯。

+1

是它可能被打印成'stderr'? – zondo

回答

2

「zondo」正確的評論,「nginx的」預測發送上述消息到標準,您可以修改代碼以讀取消息too-

>>> process = subprocess.Popen(['nginx', '-t'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
>>> out,err = process.communicate() 
>>> print out 

>>> print err 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
nginx: configuration file /etc/nginx/nginx.conf test is successful 
+0

你可以使用'output = check_output('nginx -t'.split(),stderr = STDOUT)' – jfs

+0

謝謝!解決方案就像AlokThakur和Zondo用'stderr'說的,我之前用'stderr'嘗試過,但我以錯誤的方式做了... – chrigu

+0

@chrigu您可能想接受此答案,以便其他用戶也將受益。 – AlokThakur