gpt4 book ai didi

python - subprocess.CalledProcessError 没有给出错误信息

转载 作者:行者123 更新时间:2023-11-28 22:26:20 24 4
gpt4 key购买 nike

我正在使用下面的代码获取 shell 命令的输出。

import subprocess
exitcode, err, out = 0, None, None
try:
out = subprocess.check_output(cmd, shell=True, universal_newlines=True)
except subprocess.CalledProcessError as e:
exitcode, err = e.returncode, e.output

print("x{} e{} o{}".format(exitcode, err, out))

当为 cmd 传递有效命令时,例如 echo hello,程序运行正常,输出为 (0, None, "hello\n")

但是如果我给出了一种错误的命令,我希望错误消息应该出现在 err 中,但它会直接打印出来。例如,如果我在 cmd 中传递 ls -lrt foo,则输出为

anirban@desktop> python mytest.py
ls: cannot access foo: No such file or directory
x2 e oNone

所以我希望 ls: cannot access foo: No such file or directory 应该出现在 err 中。如何做到这一点?

最佳答案

要捕获错误输出,您需要将另一个参数传递给 subprocess.check_output() 函数。您需要设置 stderr=subprocess.STDOUT。这会将 stderr 输出引导至 e.output

subprocess.check_output()subprocess.run() 的包装器。通过传递一些合理的默认值,它使我们的生活更轻松。其中之一是制作 stdout=subprocess.PIPE。这会将您正在运行的命令的标准输出引导回您的程序。同样,您可以通过传入参数 stderr=subprocess.PIPE 将标准错误输出定向到您的程序,这将填充 e.stderr,其中 e 是异常(exception)。

如果不清楚,请告诉我。

关于python - subprocess.CalledProcessError 没有给出错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44884786/

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