Python'subprocess'CalledProcessError:命令'[…]'返回非零退出状态1 [重复]

发布于 2021-01-29 14:56:49

这个问题已经在这里有了答案

子流程check_output返回非零退出状态1 (2个答案)

3年前关闭。

执行以下脚本…

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不会产生任何有用的反馈。

如何获取有关该错误的更多信息,以便进行故障排除?

关注者
0
被浏览
136
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    subprocess.check_output提出CalledProcessError上非零退出代码,ping返回非零退出代码,如果事情是错误的(如未知的域名或网站关闭,或者网站有ICMP阻塞出于某种原因,或者您的Internet连接已断开)

    如果要检查输出和退出代码,请使用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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看