subprocess.popen没有输出足够有意义的错误信息



在退出代码不是0的情况下,为了打印出更有用、更详细的错误消息,必须在下面的Python3函数中更改哪些特定语法

背景:

Python3函数成功地运行了接收JSON响应的CLI命令。但是,当CLI命令失败时,此功能无法提供有意义的错误消息。

当前版本的功能:

以下是进行CLI调用的函数,该调用应该接收JSON响应:

def getShellJsonResponse(cmd):
process = subprocess.Popen(
cmd,
shell=True,
stdout=subprocess.PIPE)
process.wait()
data, err = process.communicate()
print("data bytes is:", data)
print("data string is: ", data.decode("utf-8"))
print("err is: ", err)
print("process.returncode is: ", process.returncode)

上面的函数在JSON响应成功的情况下非常有效。

未能提供足够的错误诊断信息:

以下是抛出错误时打印出来的内容:

ClientRequestError: Operation returned a 400 status code.
data bytes is: b''
data string is:
err is:  None
process.returncode is:  1

这些返回的信息对我们来说毫无用处,因为它不够详细。

为了返回详细的有意义的错误消息,我们必须在上面的函数中具体更改什么

Edit:我错过了标准错误就在调试消息的正上方。

ClientRequestError: Operation returned a 400 status code.

如果你对你的工具打印出的错误消息不满意,我认为你需要和工具作者谈谈。

-------

主要问题可能是您没有捕获stderr,而stderr是大多数错误消息指向的地方。

然而,subprocess.run方法现在被推荐用于Popen。

https://docs.python.org/3/library/subprocess.html#subprocess.run

因此,我建议切换到该方法,并使用stderr参数来捕获错误输出。

相关内容

最新更新