2016-11-07 2 views
0

은 여기 내 간단한 예입니다파이썬에서 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을합니다. 그리고 응답 코드 –

+0

을 확인하십시오. 서브 프로세스로는 불가능합니다 .Popen? –

답변

0

stderr=subprocess.STDOUT을 통해 결과에 표준 오류를 캡처하면됩니다.
또한, string.split(' ')보다는 shlex.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] 

또는 : 대신는 popen의

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 '예를 들어? –