2016-11-07 125 views
0

這是我簡單的例子:如何用Python捕捉ping錯誤?

import subprocess 
cmd = 'ping something.local -c 1' 
tail = 'tail -n 3' 

ping = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE) 
tail = subprocess.Popen(tail.split(' '), stdin=ping.stdout, stdout=subprocess.PIPE) 
ping.stdout.close() 
out, err = tail.communicate() 
print 'Print values:' 
print out 
print err 

這裏是腳本輸出的例子:

[~/python]$ python ping_stats.py 
ping: cannot resolve tpeo.local: Unknown host 
Print values: 

None 

所以,我的變量outerr是「空」的,但我需要一個ping: cannot resolve tpeo.local: Unknown host錯誤信息。我怎麼能得到它?

+0

用途使用os.system代替POPEN。然後檢查響應代碼 –

+0

那麼,是不是可以用subprocess.Popen做? –

回答

0

只需在stderr=subprocess.STDOUT的結果中捕獲標準錯誤。
此外,使用shlex.split而不是string.split(' ')

import subprocess 
import shlex 

cmd = 'ping something.local -c 1' 

ping = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, 
         stderr=subprocess.STDOUT) 
out = ping.communicate()[0] 

或者:

import subprocess 
import shlex 

cmd = 'ping unknown -c 1' 

ping = subprocess.Popen(shlex.split(cmd), stderr=subprocess.PIPE, 
         stdout=subprocess.PIPE) 
out, err = ping.communicate() 

print out 
print err 
+0

如何管''尾巴-n 3'爲例子? –