如何在Python的shell脚本中获取退出状态集

如何在Python的shell脚本中获取退出状态集,python,shell,unix,Python,Shell,Unix,我想在从Python调用的shell脚本中获取退出状态集 代码如下 Python脚本 文件编译_cmd.sh 我正在运行这段代码,但无论返回什么退出状态,我都会将结果变量设置为0(我认为它会返回shell脚本是否成功运行) 如何获取在Python脚本的shell脚本中设置的退出状态?导入子流程 结果=subprocess.Popen(“./compile_cmd.sh”) text=result.communicate()[0] return\u code=result.returncode

我想在从Python调用的shell脚本中获取退出状态集

代码如下

Python脚本 文件编译_cmd.sh 我正在运行这段代码,但无论返回什么退出状态,我都会将结果变量设置为0(我认为它会返回shell脚本是否成功运行)

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

导入子流程
结果=subprocess.Popen(“./compile_cmd.sh”)
text=result.communicate()[0]
return\u code=result.returncode
从这里开始:

使用建议的Python v3.5+方法来补充:

导入子流程
#调用shell脚本(无需预先参与shell)
#并将其输出流通过。
#run()的返回值是一个包含已完成进程信息的对象。
completedProc=subprocess.run(“./compile_cmd.sh”)
#打印退出代码。
打印(已完成的过程返回代码)
在subprocess.Popen->creation标志用于在分离模式下创建进程 如果您不想拆下更多,只需拆下该部分。
subprocess.u进程->在python进程之外运行进程

使用proc.communicate()->您可以从该进程中获取输出和错误 wait()将等待进程完成,并给出程序的退出代码。

注意:subprocess.popen()和proc.wait()之间的任何命令都将在wait调用时像往常一样执行,在子流程完成之前,它将不再执行


您可以使用subprocess并获取返回代码,如下所示:
result = os.system("./compile_cmd.sh")
print result
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
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)