获取命令的退出代码
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
比如我有一个命令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