【问题标题】:How to get the exit status set in a shell script in Python如何在 Python 的 shell 脚本中设置退出状态
【发布时间】:2013-12-19 07:20:27
【问题描述】:

我想在一个从 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 脚本中设置的退出状态?

【问题讨论】:

标签: python shell unix


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:
    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?

    【讨论】:

      【解决方案3】:
      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)
      

      在 subprocess.Popen -> 创建标志用于在分离模式下创建进程 如果您不想再分离,只需删除该部分即可。
      subprocess.DETACHED_PROCESS -> 在 python 进程之外运行进程

      使用 proc.communicate() -> 你可以得到他的输出和那个进程的错误 proc.wait() 将等待进程完成并给出程序的退出代码。

      注意:subprocess.popen() 和 proc.wait() 之间的任何命令将在等待调用时照常执行,在子进程完成之前不会进一步执行。

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 2017-05-18
        • 1970-01-01
        • 2013-09-09
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        相关资源
        最近更新 更多