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

问题描述 投票:0回答:1

为了在退出代码不为 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

这个返回的信息对我们来说没有用,因为它不够详细。

python python-3.x subprocess popen
1个回答
-1
投票

编辑:我错过了标准错误就在调试消息上方吐出。

ClientRequestError: Operation returned a 400 status code.

如果您对工具打印出的错误消息不满意,我认为您需要与工具作者联系。

———-

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

但是,现在推荐使用 subprocess.run 方法而不是 Popen。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.