当前位置: 首页 > 面试题库 >

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

宰父俊民
2023-03-14
问题内容

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

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

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


问题答案:

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


 类似资料:
  • 问题内容: 这是我的python代码: 第一个工作良好,但是第二个返回此: 为什么会这样?是因为原始的shell命令而是新的软件包吗?我怎么解决这个问题? 问题答案: 您启动的命令已正确执行。它返回非零状态,这意味着在处理命令期间发生了错误。您可能想在命令中添加一些参数来解决该问题。 您的代码可能以这种方式显示此错误:

  • 我的命令提示符出错了。我从Jupyter尝试了,但出现了一些错误。我感谢任何查看或回答的人,感谢您的时间!

  • 当我键入 在 CentOS 7 终端中调试以使用 gradle 启动此示例Spring启动应用程序时,我收到以下错误。 我搜索了这个错误,并阅读了其他类似但不重复的SO帖子。例如,这是在CentOS 7和web应用程序中的eclipse中。这不是android应用程序等。此外,其他帖子中给出的命令也没有解决这个问题。 重现此问题所需的所有代码都在上面的github链接中,诊断问题的所有日志都在下面

  • 我是在尝试 但是我有一个错误 使用缓存的PyAudio-0.2.11.tar.gz(37 kB)安装收集的软件包:pyaudio运行setup.py为pyaudio安装:开始运行setup.py为pyaudio安装:完成,状态为“错误” 错误:命令出错,退出状态为1:' C:\ Users \ Admin \ PycharmProjects \ AI \ venv \ Scripts \ pyth

  • 问题内容: 我在Ubuntu 13.10机器上安装XML和RCurl时遇到麻烦。我今天执行了所有sudo更新和升级。 我正在尝试将拨浪鼓用于R。我无法安装使用拨浪鼓所需的“ XML”。一年后,这里几乎是同一问题,只是操作系统不同。以下是我返回的错误消息: 不太确定如何从这里继续。 问题答案: 在Ubuntu上安装curl和xml。跑 R中安装的软件包上的错误消息表示curl和xml库不存在或找不到

  • 我在windows命令提示符下键入以下命令:pip install jupyterlab 我收到以下错误: