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
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. –