Salir / terminar scripts Python (ejemplos simples)

Hoy, vamos a bucear en el tema de salir/terminar scripts Python! Antes de empezar, debe tener una comprensión básica de lo que es Python y algunos conocimientos básicos sobre su uso.

Puede usar el IDE de su elección, pero esta vez usaré el paquete Linux Subsystem for Windows (WSL) de Microsoft. Para obtener más información sobre eso y cómo habilitarlo en Windows 10, vaya aquí.

tabla de contenidos

¿por qué Python sale automáticamente de un script cuando está terminado?,

la forma en que Python ejecuta un bloque de código hace que ejecute cada línea en orden, comprobando dependencias para importar, leyendo definiciones y clases para almacenar en memoria, y ejecutando piezas de código en orden permitiendo bucles y llamadas a las definiciones y clases definidas.

Cuando el intérprete de Python llega al final del archivo (EOF), se advierte que no pueden leer datos desde el origen, ya sea la entrada del usuario a través de un IDE o leer desde un archivo. Para demostrar, vamos a tratar de obtener la entrada del usuario e interrumpir el intérprete en el medio de la ejecución!,

primero, desde su terminal bash en PowerShell abra un nuevo archivo llamado «input».,n pegue lo siguiente en el shell haciendo clic con el botón derecho en la ventana de PowerShell

name=input("Don"t type anything!\n")print("Hi,",name,"!")

ahora, presione CTRL+X para guardar y salir de la ventana nano y en su tipo de shell:

$ python3 input.pyDon"t type anything!

y presione CTRL+D para terminar el programa mientras espera la entrada del usuario

Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError

la excepción EOFError nos dice que el intérprete de Python terminó de ejecutar el código, ya que el Usuario no ingresó datos de entrada.,

Cuando Python alcanza la condición EOF al mismo tiempo que ha ejecutado todo el código sin lanzar ninguna excepción, que es una forma en que Python puede salir «con gracia».»

Detect script exit

Si Queremos saber cuándo sale un programa Python sin lanzar una excepción, podemos usar el módulo Python atexit.

elatexit maneja todo lo que queremos que el programa haga cuando sale y normalmente se usa para hacer limpieza del programa antes de que el proceso del programa termine

para experimentar con atexit, modifiquemos nuestra entrada.,py ejemplo para imprimir un mensaje al salir del programa. Abrir el input.py vuelva a archivar y reemplace el texto con este

import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")

escriba su nombre, y cuando presione enter debería obtener:

What"s your name?ExampleHi, Example !Program exited successfully!

observe cómo aparece el texto de salida al final de la salida sin importar dónde coloquemos la llamada atexit y cómo si reemplazamos atexit call with a simple print(), obtenemos el texto de salida donde se realizó el print() All, en lugar de donde sale el código.,

Program exited successfully!What"s your name?ExampleHi, Example !

Graceful exit

Hay varias maneras de salir de un programa Python que no implica lanzar una excepción; la primera que se va a intentar es quit()

Puede utilice el comando Bash echo $? para obtener el código de salida del intérprete de Python.,

También podemos definir el tipo de código con el que debe salir el intérprete entregando quit() un argumento entero inferior a 256

exit() tiene la misma funcionalidad que es un alias para quit()

id=»92636a6070″> norexit() se consideran buenas prácticas, ya que ambos requieren el módulosite, que está destinado a ser utilizado para intérpretes interactivos y no en programas., Para nuestros programas, debemos usar algo como sys.exit

Aviso de que tenemos que importar explícitamente un módulo para llamar exit(), esto puede parecer que no es una mejora, pero garantiza que el módulo está cargado porque no es una buena suposición site se cargan en tiempo de ejecución., Si no queremos importar módulos adicionales, podemos hacer lo exit(), quit() y sys.exit() están haciendo detrás de las escenas y de raise SystemExit

Salir con mensajes de error

Lo que si tenemos mal la entrada de un usuario?, Echemos un vistazo a nuestro script input.py, y agreguemos la capacidad de manejar la entrada incorrecta del usuario (CTRL+D para pasar un carácter EOF)

el le dice a Python que pruebe el código dentro de la instrucción y pase cualquier excepción a la instrucción except antes de salir.

salir sin error

¿Qué pasa si el Usuario entrega un error a su programa pero no desea que su código imprima un error, o que haga algún tipo de manejo de errores para minimizar el impacto del usuario?,

Podemos agregar una instrucción finally que nos permite ejecutar código después de hacer nuestro manejo de errores en catch

observe que el usuario nunca conocería una EOFError ocurrió, esto se puede usar para pasar valores predeterminados en caso de entrada o argumentos pobres.,

salga y libere sus recursos

generalmente, Python libera todos los recursos que ha llamado en su programa automáticamente cuando sale, pero para ciertos procesos, es una buena práctica encerrar algunos recursos limitados en un bloque with.

a menudo verá esto en llamadas open(), donde no liberar correctamente el archivo podría causar problemas con la lectura o escritura del archivo más tarde.

El with bloquear automáticamente libera todos los recursos requisado dentro de ella., Si queremos asegurarnos más explícitamente de que el archivo esté cerrado, podríamos usar el comando atexit.register() para llamar a close()

$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)

Si los recursos se llaman sin usar un bloque with asegúrese de liberarlos explícitamente en un comando atexit.

salir después de un tiempo

si nos preocupa que nuestro programa nunca termine normalmente, podemos usar el módulo multiprocessing de Python para asegurarnos de que nuestro programa termine.,

observe cómo el proceso no se completó cuando se le dijo a la función que esperara 7 segundos, pero se completó e imprimió lo que se suponía que debía cuando se le dijo que esperara 0 segundos!

salir usando una instrucción return

Si tenemos una sección de código que queremos usar para terminar todo el programa, en lugar de dejar que la instrucciónbreakcontinúe el código fuera del bucle, podemos usar la instrucciónreturn sys.exit() para salir del código por completo.,

Exit in the middle of a function

Si no queremos usar una instrucción return, todavía podemos llamar a sys.exit() para cerrar nuestro programa y proporcionar un return en otra rama. Usemos nuestro código de break.py otra vez.

salir cuando se cumplen las condiciones

si tenemos un bucle en nuestro código Python y queremos asegurarnos de que el código puede salir si encuentra un problema, podemos usar una bandera que puede verificar para terminar el programa.,

Salir de la tecla

Si queremos mantener nuestro programa abierto en la consola hasta que se pulse una tecla, se puede utilizar un independiente input() cerrar.

$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$

también se puede pasar CTRL+C a la consola para darle Python KeyboardInterrupt carácter. Incluso podemos manejar la excepción KeyboardInterrupt como hemos manejado excepciones antes.,

la Salida de un programa multiproceso

al Salir de un programa multiproceso es ligeramente más implicado, como un simple sys.exit() se llama desde el hilo que sólo saldrá el subproceso actual., La forma «sucia» de hacerlo es usar os._exit()

como puede ver, el programa no imprimió el resto del programa antes de que saliera, es por eso que os._exit() se reserva típicamente para un último recurso, y Thread.join() del hilo principal es el método preferido para finalizar un programa multiproceso.,

End without sys exit

Sys.exit() es solo una de varias maneras en que podemos salir de nuestros programas Python, lo que sys.exit() hace es raise SystemExit, por lo que podemos usar cualquier excepción integrada en Python o crear una propia!

también podemos utilizar la etiqueta os._exit() para decirle al sistema host para matar el python proceso, aunque esto no hace atexit limpieza.,

Salir a excepción

Si queremos salir en cualquier excepción, sin manipulación alguna, podemos usar nuestro try-except bloque a ejecutar os._exit().

Exit and restart

finalmente, exploraremos lo que hacemos para salir de Python y reiniciar el programa, lo cual es útil en muchos casos.

espero que el tutorial sea útil. Sigue regresando.

Gracias.,

Fundador de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable del mantenimiento, la seguridad y la solución de problemas de los servidores Linux para múltiples clientes en todo el mundo. Me encanta escribir scripts de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *