【问题标题】:subprocess.check_ouput() return codesubprocess.check_output() 返回码
【发布时间】:2014-11-03 04:41:08
【问题描述】:

我正在使用 subprocess.check_output() 通过 Sysinternals PSExec 在远程机器上执行一些命令。我遇到的问题是,如果命令给出非零返回码,则 check_output() 会引发 CalledProcessError。

PSExec 将创建的进程的 PID 作为其返回码,所以很明显我每次都会遇到错误。有没有办法可以覆盖此错误并仍然检查 psexec 调用的输出?基本上我只需要查看输出,即使它的返回码不为零。

谢谢!

【问题讨论】:

  • 你可以使用subprocess.call 假设你没有管道stdout/stderr。所做的只是运行命令,阻塞直到它完成,然后返回返回码。
  • 谢谢,我实际上需要输出作为字符串,而不仅仅是返回码。我正在输出中搜索关键字以确保它成功执行。

标签: python subprocess psexec


【解决方案1】:

the docs:

如果退出代码不为零,则会引发 CalledProcessError。这 CalledProcessError 对象将在 returncode 中有返回码 输出属性中的属性和输出。


try:
    output = subprocess.check_output([...], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as err:
    return_code = err.returncode
    output = err.output

【讨论】:

  • 是的,所以我尝试了这个......不幸的是,由于某种原因 err.returncode 工作正常,但 err.ouput 显然是空的(当我将它打印到控制台时,它只打印一个空行)。
  • 也许进程正在写入 stderr 而不是 stdout。在这种情况下,也可以使用stderr=subprocess.STDOUT 来捕获其输出。
  • 如果您需要将stdout和stderr分开,您可以使用subprocess.Popen及其communicate()方法代替subprocess.check_output...
  • 做到了,显然我正在寻找的输出出于某种原因在 STDERR 中。非常感谢!
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2018-10-24
  • 1970-01-01
  • 2019-04-18
  • 2015-05-04
  • 2022-01-15
相关资源
最近更新 更多