我正在用Python写一个IRC机器人,由于它的alpha性质,它可能会出现意外错误并退出。
我可以用什么技术让程序再次运行?
答案 0 :(得分:5)
您可以使用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
答案 1 :(得分:1)
您可以使用子进程(http://docs.python.org/library/subprocess.html)创建包装器,它将您的应用程序生成为子进程并跟踪它的执行。
答案 2 :(得分:0)
最简单的方法是捕获错误,关闭旧的并在捕获它时打开程序的新实例。
请注意,它并不总是有效(如果它在没有抛出错误的情况下停止工作)。