例如,我有一个命令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的过程没有显示在屏幕上,这是我不希望它发生的。
答案 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