我需要一种方法来运行 python 脚本文件,如果脚本因未处理的异常而失败,python 应该以非零退出代码退出。我的第一次尝试是这样的:
import sys
if __name__ == '__main__':
try:
import <unknown script>
except:
sys.exit(-1)
但是由于__main__
经常使用守卫,它破坏了很多脚本。有关如何正确执行此操作的任何建议?
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.
如果我在这里感到困惑,请纠正我。
如果您想在脚本中运行脚本,那么导入不是办法;如果您只关心捕获异常,则可以使用 exec:
namespace = {}
f = open("script.py", "r")
code = f.read()
try:
exec code in namespace
except Exception:
print "bad code"
你也可以先编译代码
compile(code,'<string>','exec')
如果您打算多次执行脚本并在命名空间中执行结果
或者如上所述使用 subprocess,如果您需要获取脚本生成的输出。