gpt4 book ai didi

python - 如何知道 Python subprocess.check_output() 调用的确切输出?

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:31 25 4
gpt4 key购买 nike

我正在使用 subprocess.check_output() call 从 Python 中运行一些终端命令.当它返回正确的结果时,一切正常。然而,当与比特币守护进程交互时,我可以得到几个响应。例如,原始输出(如在普通 bash 命令行中看到的那样)可以是:

: Cannot obtain a lock on data directory /home/kramer65/.bitcoin. Bitcoin is probably already running.

error: couldn't connect to server

然而,这两个响应都给出错误代码 1。我尝试将 subprocess.CalledProcessError 的以下属性打印为 e,这在两种情况下都会产生相同的输出(当然 cmd 属性除外:

print e.args, e.cmd, e.message, e.output, e.returncode
# () 'BTC' 1
# () 'BTC getinfo' 1

我想唯一能区分这两个错误的是我在上面列出的命令行上输出的原始字符串。所以我的问题是:如何从 Python 中获取命令行中显示的原始字符串?

最佳答案

它很可能出现在 stderr 上。

你可以设置你的子流程

stderr=subprocess.STDOUT

作为一个 kwarg 将 stdout 和 stderr 合并在一起。

或者,如果您单独需要它们,请执行以下操作

proc = subprocess.Popen(..., stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()

注意:与 check_output 不同,如果返回代码不为零,此方法不会引发异常,因此如果这是您想要的行为,则必须手动执行此操作。

关于python - 如何知道 Python subprocess.check_output() 调用的确切输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25523361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com