问题描述
正在执行以下脚本...
Executing the following script...
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
CalledProcessError: Command '[ping', '-q', '-c2', '-W1', '10.81.3.80 ']' returned non-zero exit status 1
在 check_output 中添加stderr = STDOUT"并没有产生任何有用的反馈.
Adding "stderr = STDOUT" in check_output did not produce any useful feedback.
如何获取有关错误的更多信息以便解决问题?
How can I obtain more information regarding the error so that I can troubleshoot it?
推荐答案
subprocess.check_output 在非零退出代码和 ping 上引发 CalledProcessErrorcode> 如果出现错误(例如,未知域名、站点已关闭、站点因某种原因阻止 ICMP 或您的 Internet 连接已关闭),则返回非零退出代码.
subprocess.check_output raises CalledProcessError on non-zero exit code, and ping returns non-zero exit code if something is wrong (e.g. unknown domain name, or site is down, or site has ICMP blocked for some reason, or your Internet connection is down).
如果您想检查输出和退出代码,请使用 subprocess.Popen:
If you want to examine both output and exit code, use 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
这篇关于Python 'subprocess' CalledProcessError: Command '[...]' 返回非零退出状态 1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)