2009-07-27 108 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

最簡單的方法是捕捉錯誤,關閉舊的並在捕捉時打開程序的新實例。

請注意,它不會總是工作(如果它停止工作,而不會引發錯誤)。

相關問題