在退出代码不是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参数来捕获错误输出。