获取命令的退出代码

Get exit code of a command

比如我有一个命令commandA,想获取commandA执行后的退出码。 CommandA 预计会失败,所以我们应该得到的退出代码是 1.

如果我在终端中键入命令 commandA;echo $?,屏幕上会显示 1。但是,当我使用 python 执行此操作时,出现了问题。

我试过用os.system(commandA)subprocess.call(commandA.split())调用commandA,然后调用os.popen('echo $?').read(),结果是0。

os.popen('commandA;echo $?').read() 给了我一个正确的结果,但是 commandA 的过程没有显示在屏幕上,这是我不希望它发生的。

subprocess.call returns直接退出代码:

exit_code = subprocess.call(commandA.split())

您对 echo $? 的尝试无效的原因是 echo(通常)和 $?(当然)都是 shell 的构造,并且不要不存在于 Python.

这在某种程度上取决于 python 版本。你可以这样做:

result=subprocess.check_output(['commandA'],Shell='True')

对于 3.x 你这样做:

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)

或者您可以使用 try catch 来仅查看错误。类似于:

try:
    output = subprocess.check_output(["command"])
except subprocess.CalledProcessError as e:
    errorCode = e.returncode