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

当python脚本有未处理的异常时退出代码,python,exit-code,Python,Exit Code,我需要一个方法来运行python脚本文件,如果脚本因未处理的异常而失败,python应该以非零退出代码退出。我的第一次尝试是这样的: import sys if __name__ == '__main__': try: import <unknown script> except: sys.exit(-1) 导入系统 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 尝试: 进口 除: 系统出口(

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

import sys
if __name__ == '__main__':
    try:
        import <unknown script>
    except:
        sys.exit(-1)
导入系统 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 尝试: 进口 除: 系统出口(-1)
但是由于经常使用
\uuuu main\uuuu
保护,它会破坏很多脚本。有没有关于如何正确执行此操作的建议?

Python已经完成了您的要求:

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

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

如果您想在脚本中运行脚本,那么导入是不合适的;如果只关心捕获异常,则可以使用exec:

namespace = {}
f = open("script.py", "r")
code = f.read()
try:
    exec code in namespace
except Exception:
    print "bad code"
您也可以先使用

compile(code,'<string>','exec')
compile(代码,,'exec')
如果计划多次执行脚本并在命名空间中执行结果


或者,如果需要获取脚本生成的输出,请使用上述子流程。

要运行脚本还是导入模块?如果你想运行脚本,你可以使用这个模块。我得到一个未知的脚本。我想运行它,如果它崩溃,我会得到一个非零的退出代码。子进程没有多大帮助,因为即使脚本抛出未处理的异常,python进程也会愉快地返回0。因此,我的python或shell出现了严重的问题,因为无论我做什么,我的python都坚持使用0失败。我会看看能不能查出发生了什么事。感谢您对预期行为的清晰解释。Python退出代码在我找到的任何地方都没有文档记录!我看了一眼,也找不到任何地方记录了退出代码。查看有关您的设置的更多信息(Python版本、操作系统、触发0返回代码的脚本,您认为应该有非零代码)可能会很有用,以查看我们是否可以复制Ubuntu 10.10,但升级了几次,并手动编译并安装了Python 2.6.0。甚至像foo=0/0这样的东西也引发了这个问题。最终,解决方案非常简单,只需扔掉旧的python安装,用标准的Ubuntu包替换即可。谢谢你的帮助!
compile(code,'<string>','exec')