unix 如何在Python中获取shell脚本中设置的退出状态

wnavrhmk  于 2023-03-29  发布在  Unix
关注(0)|答案(3)|浏览(162)

我想在Python调用的shell脚本中获取退出状态集。
代码如下

Python脚本

result = os.system("./compile_cmd.sh")
print result

文件 compile_cmd.sh

javac @source.txt
# I do some code here to get the number of compilation errors
if [$error1 -e 0 ]
then
echo "\n********** Java compilation successful **********"
exit 0
else
echo "\n** Java compilation error in file ** File not checked in to CVS **"
exit 1
fi

我正在运行这段代码,但无论我返回的是什么退出状态,我都将得到结果var为0(我认为它将返回shell脚本是否成功运行)。
如何获取在Python脚本的shell脚本中设置的退出状态?

3ks5zfa0

3ks5zfa01#

import subprocess

result = subprocess.Popen("./compile_cmd.sh")
text = result.communicate()[0]
return_code = result.returncode

从此处获取:How to get exit code when using Python subprocess communicate method?

gg0vcinb

gg0vcinb2#

要使用推荐的**Python v3.5+**方法使用subprocess.run()来补充cptPH's helpful answer

import subprocess

# Invoke the shell script (without up-front shell involvement)
# and pass its output streams through.
# run()'s return value is an object with information about the completed process. 
completedProc = subprocess.run('./compile_cmd.sh')

# Print the exit code.
print(completedProc.returncode)
ndh0cuux

ndh0cuux3#

import subprocess
proc = subprocess.Popen("Main.exe",stdout=subprocess.PIPE,creationflags=subprocess.DETACHED_PROCESS)
result,err = proc.communicate()
exit_code = proc.wait()
print(exit_code)
print(result,err)

在子进程中.Popen -〉创建标志用于在分离模式下创建进程,如果你不想在分离模式下创建进程,只需删除该部分即可。
subprocess.DETACHED_PROCESS -〉在python进程之外运行进程
使用proc.communicate()-〉你可以得到输出和来自该进程的错误proc.wait()将等待进程完成并给出程序的退出代码。
注意:subprocess.popen()和proc.wait()之间的任何命令都将在等待调用时照常执行,在子进程完成之前不会进一步执行。

相关问题