2016-10-16 37 views
0

我試過下面的代碼來捕獲使用子進程從屏幕輸出,但它沒有做我想做的事。子進程沒有捕獲stdout的輸出存儲在Python中的變量內

#!/tools/bin/python 

import subprocess 

result = subprocess.check_output("echo $USERNAME", shell=True) 
print result 

預期輸出是:

vimo 
vimo 

即一個用於回波過程和一個用於打印結果輸出。 但我看到的是

vimo 

但是,當我嘗試打印結果輸出,它總是空的。

我在上面的拼圖中錯過了什麼!幫幫忙!

+0

父進程捕獲孩子的標準輸出。所以結果相當期待 – user3159253

+1

你想達到什麼目的? – user3159253

+0

哦!對不起..感到困惑,並認爲它會打印兩個輸出..但後來我明白存儲在變量中的值被打印出來。 – Vimo

回答

0

這裏你去了一些大大剝離(併爲了保護隱私的原因)原始虛擬一段代碼,從外部腳本輸出抓取stdin和stdout。

from subprocess import Popen, PIPE 

cmd = ['echo', 'foo'] 

proc = Popen(cmd, stdout=PIPE, stderr=PIPE) 
comm = proc.communicate() 

if proc.returncode != 0: 
    # code to handle/parse stderr (comm[1]) 
    raise RuntimeError(
     '\'%s\': command has failed (%d):\n%s' 
     % ('some value', proc.returncode, comm[1])) 

for line in comm[0].split('\n'): 
    if line.find('Wrote:') == 0: 
     # some code to parse stdout 
     pass 
相關問題