gpt4 book ai didi

python - 当子进程引发 CalledProcessError 异常时检查命令的返回码

转载 作者:IT老高 更新时间:2023-10-28 20:32:10 33 4
gpt4 key购买 nike

我想在python(3)脚本中捕获shell命令的stdout流,同时能够检查shell命令的返回码是否返回一个错误(也就是说,如果它的返回码不是 0)。

subprocess.check_output 似乎是执行此操作的合适方法。来自 subprocess 的手册页:

check_output(*popenargs, **kwargs)
Run command with arguments and return its output as a byte string.

If the exit code was non-zero it raises a CalledProcessError. The
CalledProcessError object will have the return code in the returncode
attribute and output in the output attribute.

但是,当它失败时,我没有成功从 shell 命令获取返回码。我的代码如下所示:

import subprocess
failing_command=['ls', 'non_existent_dir']

try:
subprocess.check_output(failing_command)
except:
ret = subprocess.CalledProcessError.returncode # <- this seems to be wrong
if ret in (1, 2):
print("the command failed")
elif ret in (3, 4, 5):
print("the command failed very much")

这段代码在处理异常时引发了异常:

Traceback (most recent call last):
File "<stdin>", line 4, in <module>
AttributeError: type object 'CalledProcessError' has no attribute 'returncode'

我承认我不知道我错在哪里。

最佳答案

获取进程输出和返回代码:

from subprocess import Popen, PIPE

p = Popen(["ls", "non existent"], stdout=PIPE)
output = p.communicate()[0]
print(p.returncode)

subprocess.CalledProcessError 是一个类。要访问 returncode,请使用异常实例:

from subprocess import CalledProcessError, check_output

try:
output = check_output(["ls", "non existent"])
returncode = 0
except CalledProcessError as e:
output = e.output
returncode = e.returncode

print(returncode)

关于python - 当子进程引发 CalledProcessError 异常时检查命令的返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15316398/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com