即使退出状态为非零,也可以使用 check_output 获取输出

Get the output with check_output even with a non-zero exit status

我在我的脚本中多次使用 subprocess.check_output,但我只是 运行 遇到了外部应用程序的问题。 OpenVPN 在这种情况下。

当使用我想在我的脚本中解析的 --help 参数调用 openvpn 时,它 returns 1 作为它的退出代码。 check_ouput 在非零退出代码上阻塞并失败并显示以下消息:

subprocess.CalledProcessError: Command '['openvpn', '--help']' returned non-zero exit status 1

问: 我不明白为什么 openvpn 这样做,但我怎么能让 check_output 给我输出,即使 return代码?

编辑: 我使用完全相同的代码和 --show-digests 或其他参数,一切似乎都工作得很好。

output = check_output(["openvpn", "--show-digests"])

根据 docs,输出在 CalledProcessError 异常的 .output 属性中可用。

所以像这样的东西应该可以工作:

try:
    result = subprocess.check_output(...).stdout
except subprocess.CalledProcessError as exc:
    result = exc.output