我正在用 Python 编写一个 IRC 机器人,由于它的 alpha 特性,它可能会出现意外错误并退出。
我可以使用哪些技术使程序再次运行?
可以sys.exit()
用来判断程序异常退出(一般情况下出错返回1)。
您的 Python 脚本可能如下所示:
import sys
def main():
# ...
if __name__ == '__main__':
try:
main()
except Exception as e:
print >> sys.stderr, e
sys.exit(1)
else:
sys.exit()
如果出现错误,您可以再次调用main()
,但程序可能无法再次正常工作。相反,在新进程中启动程序可能更安全。
因此,您可以编写一个调用 Python 脚本的脚本,在完成时获取其返回值,并在返回值不同于 0 时重新启动它(sys.exit()
默认情况下用作返回值)。这可能看起来像这样:
import subprocess
command = 'thescript'
args = ['arg1', 'arg2']
while True:
ret_code = subprocess.call([command] + args)
if ret_code == 0:
break
You can create wrapper using subprocess(http://docs.python.org/library/subprocess.html) which will spawn your application as a child process and track it's execution.
最简单的方法是捕获错误,并在捕获它们时关闭旧的程序实例并打开一个新的程序实例。
请注意,它并不总是有效(如果它停止工作而不会引发错误)。