即使退出状态为非零,也可以使用 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
我在我的脚本中多次使用 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