执行以下脚本…
import socket import sys from collections import OrderedDict from subprocess import check_output from threading import Thread
[…]
class IpCheck(Thread): RECEIVED_PACKAGES_RE = re.compile(r'(\d+) received') def __init__(self, ip): Thread.__init__(self) self.ip = ip self.result = None def run(self): match = self.RECEIVED_PACKAGES_RE.search( check_output(['ping', '-q', '-c2', '-W1', self.ip]) ) successful_ping_count = int(match.group(1)) if match else 0 if successful_ping_count == 0: self.result = 'no response' elif successful_ping_count == 1: self.result = 'alive, but 50% package loss' elif successful_ping_count == 2: self.result = check_snmp(self.ip) else: assert False [...]
…导致错误:
CalledProcessError:命令’[ping’,’-q’,’-c2’,’-W1’,‘10 .81.3.80’]’返回非零退出状态1
在中添加“ stderr = STDOUT”check_output不会产生任何有用的反馈。
check_output
如何获取有关该错误的更多信息,以便进行故障排除?
subprocess.check_output提出CalledProcessError上非零退出代码,ping返回非零退出代码,如果事情是错误的(如未知的域名或网站关闭,或者网站有ICMP阻塞出于某种原因,或者您的Internet连接已断开) 。
ping
如果要检查输出和退出代码,请使用subprocess.Popen:
import subprocess import sys site = sys.argv[1] ping_count = 4 process = subprocess.Popen(['ping', site, '-c', str(ping_count)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) returncode = process.wait() print('ping returned {0}'.format(returncode)) print(process.stdout.read())
例子:
$ python ping.py google.com <-- ping successful ping returned 0 PING google.com (195.64.213.27) 56(84) bytes of data. 64 bytes from cache.google.com (195.64.213.27): icmp_seq=1 ttl=57 time=59.8 ms 64 bytes from cache.google.com (195.64.213.27): icmp_seq=2 ttl=57 time=2.43 ms 64 bytes from cache.google.com (195.64.213.27): icmp_seq=3 ttl=57 time=77.0 ms 64 bytes from cache.google.com (195.64.213.27): icmp_seq=4 ttl=57 time=43.8 ms --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 2.439/45.802/77.096/27.658 ms $ python ping.py asdasdas.com <-- DNS resolved, but site is down ping returned 1 PING asdasdas.com (69.172.201.208) 56(84) bytes of data. --- asdasdas.com ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3024ms $ python ping.py asdasdasdasda.com <-- DNS failed ping returned 2 ping: unknown host asdasdasdasda.com