2009-07-27 241 views
1

我正在用Python编写一个IRC bot,由于它的alpha特性,它可能会收到意想不到的错误并退出。如何在Python意外退出后再次运行程序?

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

+0

我只注意到我的答案包含不正确的数据:“通常,在出现错误时则返回0”应为“一般,1错误的情况下返回”。现在已经纠正了。 – 2009-07-28 12:09:31

回答

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 
+0

非常pythonic :-) – 2009-07-27 12:11:13

0

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

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