2016-02-02 68 views
3

我的代碼在終端中有兩個潛在的結果:Can't connect RFCOMM socket: Permission deniedCan't connect RFCOMM socket: Host is down。我需要將結果作爲字符串存儲在變量中,但我嘗試過的所有內容都失敗了。這是我想會做它的代碼:無法用python存儲子進程的終端輸出

from subprocess import check_output 

out = check_output(["sudo", "rfcomm", "connect", "0", "AA:BB:CC:DD:EE:FF", "10"]) 
print "output: %s" % out 

相反,我得到什麼:

user:~/home $./foo.py 
Can't connect RFCOMM socket: Permission denied 
output: 

的另一種嘗試:

proc = subprocess.Popen(["sudo rfcom connect 0 AA:BB:CC:DD:EE:FF 10"], stdout=subprocess.PIPE, shell=True) 
(out, err) = proc.communicate() 
print "output: %s" % out, err 

這至少給我的東西當我打印。不幸的是它的「無」告訴我沒有任何錯誤,而不是實際的輸出:

user:~/home $./foo.py 
Can't connect RFCOMM socket: Permission denied 
output: None 

我已經嘗試過thisthisthisthis,也許一對夫婦他人。我確信我在某個地方錯過了一些關鍵知識。感謝任何指針!

+3

你嘗試加入:'STDERR = subprocess.PIPE'? – Gerrat

+0

SON.OF.A.B Gerrat。我向上帝發誓,我多次嘗試過,但沒有奏效。爲了以防萬一,我再給它一次鏡頭,並且它可以工作。 – quelleck

回答

2

rfcomm顯然是將其輸出寫入標準錯誤,但您只是捕獲標準輸出。同時捕獲,在調用check_output包括stderr=subprocess.STDOUT

subprocess.check_output(["sudo", "rfcomm", "connect", "0", "AA:BB:CC:DD:EE:FF", "10"], 
         stderr=subprocess.STDOUT) 
+0

謝謝一堆。以爲我早些時候嘗試過正確的方法,但我猜不是。 – quelleck