当python脚本有未处理的异常时退出代码

时间:2011-03-28 08:03:01

标签: python exit-code

我需要一个方法来运行python脚本文件,如果脚本因未处理的异常而失败,python应该以非零退出代码退出。我的第一次尝试是这样的:

import sys
if __name__ == '__main__':
    try:
        import <unknown script>
    except:
        sys.exit(-1)

但由于经常使用__main__后卫,它打破了很多脚本。有关如何正确执行此操作的任何建议吗?

2 个答案:

答案 0 :(得分:13)

Python已经做了你要问的事情:

$ python -c "raise RuntimeError()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
RuntimeError
$ echo $?
1

经过OP的一些编辑后,也许你想要:

import subprocess

proc = subprocess.Popen(['/usr/bin/python', 'script-name'])
proc.communicate()
if proc.returncode != 0:
    # Run failure code
else:
    # Run happy code.

如果我在这里感到困惑,请纠正我。

答案 1 :(得分:2)

如果你想在脚本中运行脚本,那么导入就不是这样了;如果你只关心捕获异常,你可以使用exec:

namespace = {}
f = open("script.py", "r")
code = f.read()
try:
    exec code in namespace
except Exception:
    print "bad code"

您也可以先用

编译代码
compile(code,'<string>','exec')

如果您计划多次执行脚本并将结果执行到命名空间

或如上所述使用子进程,如果您需要获取脚本生成的输出。