Cómo hacer que el programa ejecute de nuevo después de la salida inesperada en Python?
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?
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).