2009-07-27 9 views
1

J'écris un bot IRC en Python, en raison de la nature alpha de celui-ci, il va probablement obtenir des erreurs inattendues et quitter.Comment faire fonctionner le programme à nouveau après une sortie inattendue en Python?

Quelles sont les techniques que je peux utiliser pour relancer le programme?

+0

Je viens de remarquer que ma réponse contenait quelque chose d'incorrect: « En règle générale, 0 est retourné en cas d'erreur » devrait être « en général, 1 est retourné en cas d'erreur ». C'est corrigé maintenant. –

Répondre

5

Vous pouvez utiliser sys.exit() pour indiquer que le programme s'est arrêté anormalement (en général, 1 est renvoyé en cas d'erreur).

Votre script Python pourrait ressembler à ceci:

import sys 

def main(): 
    # ... 

if __name__ == '__main__': 
    try: 
     main() 
    except Exception as e: 
     print >> sys.stderr, e 
     sys.exit(1) 
    else: 
     sys.exit() 

Vous pouvez appeler à nouveau main() en cas d'erreur, mais le programme pourrait ne pas être dans un état où il peut fonctionner à nouveau correctement. Il peut être plus sûr de lancer le programme dans un nouveau processus. Vous pouvez donc écrire un script qui appelle le script Python, obtient sa valeur de retour quand il se termine et le relance si la valeur de retour est différente de 0 (ce que sys.exit() utilise comme valeur de retour par défaut). Cela peut ressembler à ceci:

import subprocess 

command = 'thescript' 
args = ['arg1', 'arg2'] 

while True: 
    ret_code = subprocess.call([command] + args) 

    if ret_code == 0: 
     break 
+0

Très Pythonique :-) –

0

La méthode la plus simple consiste à détecter les erreurs et à fermer l'ancienne et à ouvrir une nouvelle instance du programme lorsque vous l'attrapez. Notez que cela ne fonctionnera pas toujours (dans les cas où cela s'arrête de fonctionner sans erreur).

Questions connexes