Come rendere il programma di eseguire di nuovo dopo l'uscita inaspettata in Python?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un bot IRC in Python, a causa della natura alpha di esso, sarà probabilmente ottenere errori imprevisti e uscire.

Qual è la tecnica che posso usare per rendere di nuovo l'esecuzione del programma?

È stato utile?

Soluzione

È possibile utilizzare sys.exit() per dire che il programma è terminato in modo anomalo (in genere, 1 viene restituito in caso di errore).

Lo script Python potrebbe essere simile a questo:

import sys

def main():
    # ...

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

Si può chiamare di nuovo main() in caso di errore, ma il programma potrebbe non essere in uno stato in cui si può lavorare di nuovo correttamente. Può essere più sicuro per avviare il programma in un nuovo processo, invece.

Quindi, si potrebbe scrivere uno script che richiama lo script Python, prende il suo valore di ritorno quando finisce, e rilancia, se il valore di ritorno è diverso da 0 (che è quello che sys.exit() usa come valore di ritorno di default). Questo potrebbe essere simile a questa:

import subprocess

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

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

    if ret_code == 0:
        break

Altri suggerimenti

È possibile creare involucro usando sottoprocesso ( http://docs.python.org/library/ subprocess.html ) che riproducono l'applicazione come un processo figlio e la pista è l'esecuzione.

Il modo più semplice è quello di catturare gli errori, e chiudere il vecchio e aprire una nuova istanza del programma quando non cattura em.

Si noti che non sempre funziona (in casi smette di funzionare senza generare un errore).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top