Comment rendre le programme courir à nouveau après la sortie inattendue en Python?

StackOverflow https://stackoverflow.com/questions/1187653

  •  19-09-2019
  •  | 
  •  

Question

J'écris un bot IRC en Python, en raison de la nature alpha, il obtiendra probablement des erreurs inattendues et quitter.

Quelle est les techniques que je peux utiliser pour faire fonctionner le programme à nouveau?

Était-ce utile?

La solution

Vous pouvez utiliser sys.exit() pour dire que le programme est sorti de façon anormale (en général, 1 est retourné 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 peut-être pas dans un état où il peut fonctionner à nouveau correctement. Il peut être plus sûr de lancer le programme dans un nouveau lieu processus.

Vous pouvez écrire un script qui appelle le script Python, obtient sa valeur de retour quand il se termine, et il relance si la valeur de retour est différent de 0 (qui est 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

Autres conseils

Vous pouvez créer wrapper en utilisant le sous-processus ( http://docs.python.org/library/ subprocess.html ) qui engendrera votre application en tant que processus enfant et de suivre son exécution.

Le plus simple est de détecter les erreurs, et fermer l'ancien et ouvrir une nouvelle instance du programme lorsque vous ne surprenez em.

Notez que cela ne fonctionne pas toujours (en cas, il cesse de fonctionner sans lancer une erreur).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top