为了在退出代码不为 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
这个返回的信息对我们来说没有用,因为它不够详细。
编辑:我错过了标准错误就在调试消息上方吐出。
ClientRequestError: Operation returned a 400 status code.
如果您对工具打印出的错误消息不满意,我认为您需要与工具作者联系。
———-
主要问题可能是您没有捕获 stderr,这是大多数错误消息所指向的地方。
但是,现在推荐使用 subprocess.run 方法而不是 Popen。
https://docs.python.org/3/library/subprocess.html#subprocess.run
因此,我建议切换到该方法并使用 stderr 参数来捕获错误输出。