如何在Python中意外退出后再次运行程序?

时间:2009-07-27 11:29:23

标签: python irc

我正在用Python写一个IRC机器人,由于它的alpha性质,它可能会出现意外错误并退出。

我可以用什么技术让程序再次运行?

3 个答案:

答案 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)

最简单的方法是捕获错误,关闭旧的并在捕获它时打开程序的新实例。

请注意,它并不总是有效(如果它在没有抛出错误的情况下停止工作)。