Cómo hacer que el programa ejecute de nuevo después de la salida inesperada en Python?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un bot de IRC en Python, debido a la naturaleza alfa de ella, es probable que obtener errores inesperados y salir.

¿Qué hay de las técnicas que puedo usar para hacer que el programa se ejecute de nuevo?

¿Fue útil?

Solución

Puede utilizar sys.exit() a decir que el programa se cerró normalmente (por lo general, 1 se devuelve en caso de error).

La secuencia de comandos de Python podría ser algo como esto:

import sys

def main():
    # ...

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

Se le podría llamar de nuevo main() en caso de error, pero el programa no podría estar en un estado en el que puede funcionar correctamente de nuevo. Puede ser más seguro para poner en marcha el programa en un nuevo proceso en su lugar.

Así se podría escribir un script que invoca el script Python, toma su valor de retorno cuando termina, y relanza que si el valor de retorno es diferente de 0 (que es lo sys.exit() utiliza como valor de retorno por defecto). Esto puede ser algo como esto:

import subprocess

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

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

    if ret_code == 0:
        break

Otros consejos

Puede crear envoltorio utilizando subproceso ( http://docs.python.org/library/ subprocess.html ), que permita hacer surgir de su aplicación como un proceso hijo y la pista es la ejecución.

La forma más fácil es detectar errores, y cerrar el viejo y abrir una nueva instancia del programa cuando usted coge el em.

Tenga en cuenta que no siempre va a funcionar (en los casos en que deje de funcionar sin lanzar un error).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top