获取命令的退出代码

时间:2018-05-25 13:46:04

标签: python subprocess os.system

例如,我有一个命令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()给了我一个正确的结果,但是命令A的过程没有显示在屏幕上,这是我不希望它发生的。

2 个答案:

答案 0 :(得分:3)

subprocess.call直接返回退出代码:

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

echo $?尝试失败的原因是echo(通常)和$?(当然)都是shell的结构,并且不存在于蟒。

答案 1 :(得分:0)

它取决于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