1

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

我可以使用哪些技术使程序再次运行?

4

3 回答 3

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
于 2009-07-27T11:59:31.777 回答
1

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.

于 2009-07-27T11:49:31.987 回答
0

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

请注意,它并不总是有效(如果它停止工作而不会引发错误)。

于 2009-07-27T11:34:22.033 回答