subprocess.check_ouput()返回代码

DJM*_*y12 0 python subprocess psexec

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

PSExec将创建的进程的PID作为其返回代码,因此很明显每次都会出现错误。有没有一种方法可以覆盖此错误并仍然检查psexec调用的输出?基本上,我只需要查看输出,即使其返回码为非零也是如此。

谢谢!

unu*_*tbu 5

根据文档

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


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

  • 也许进程正在写到stderr而不是stdout。在这种情况下,也可以使用“ stderr = subprocess.STDOUT”捕获其输出。 (2认同)
  • 如果需要将stdout和stderr分开,则可以使用subprocess.Popen及其通信方法代替subprocess.check_output。 (2认同)