¿Hay una manera de mantener a los rastreos de subir cuando se pulse Ctrl +c, es decir, elevar KeyboardInterrupt
en un script en Python?Retire el rastreo, en Python en Ctrl-C
Respuesta
import sys
try:
# your code
except KeyboardInterrupt:
sys.exit(0) # or 1, or whatever
es la forma más simple, suponiendo que todavía quiere salir cuando obtener un Ctrl + c.
Si desea trampa sin un try/except, se puede utilizar un recipe like this utilizando el signal
module, excepto que no parece funcionar para mí en Windows ..
captura del KeyboardInterrupt
:
try:
# do something
except KeyboardInterrupt:
pass
atraparla con un bloque try/except:
while True:
try:
print "This will go on forever"
except KeyboardInterrupt:
pass
try:
your_stuff()
except KeyboardInterrupt:
print("no traceback")
También tenga en cuenta que por defecto el intérprete sale con el código de estado 128 + el valor de SIGINT en su plataforma (que es 2 en la mayoría de los sistemas).
import sys, signal
try:
# code...
except KeyboardInterrupt: # Suppress tracebacks on SIGINT
sys.exit(128 + signal.SIGINT) # http://tldp.org/LDP/abs/html/exitcodes.html
Si se cancela el comando de shell 'sleep 10', el código de salida es 130 en mi sistema. Sin embargo, el código de salida para cuando 'KeyboardInterrupt' se genera en Python es simplemente 1. Considere [este error cerrado] (https://bugs.python.org/issue14229). Como tal, creo que la respuesta es inconsistente. –
Prueba esto:
import signal
signal.signal(signal.SIGINT, lambda x,y: sys.exit(0))
De esta manera no es necesario para envolver todo en un controlador de excepciones.
Es fundamentalmente incorrecto salir con el estado 0 dado que 'SIGINT' se activa. El estado de salida devuelto idealmente debe conservarse, como si la excepción no se detectara. –
No del todo comprendido lambda; ¿Puedes explicar el uso de "x, y:" aquí en lugar de solo "x:"? – Locane
@Locane es por [este] (https://docs.python.org/3.7/library/signal.html#signal.signal), básicamente, el segundo argumento de signal.signal es una función 'handler' que toma dos parámetros. Para mayor claridad, x y y podrían ser renombrados así 'signal.signal (signal.SIGINT, lambda signal_number, current_stack_frame: sys.exit (0))' – oidualc
import sys
try:
print("HELLO")
english = input("Enter your main launguage: ")
print("GOODBYE")
except KeyboardInterrupt:
print("GET LOST")
- 1. Retire el espacio en blanco en Python usando string.whitespace
- 2. ¿Cómo rastreo el movimiento usando OpenCV en Python?
- 3. Retire la lista de la lista en Python
- 4. módulo de rastreo de Python para principiantes
- 5. ¿Cómo salir de Python sin rastreo?
- 6. Python: cómo formatear objetos de rastreo
- 7. rastreo recursivo con Python y Scrapy
- 8. ¿Cómo generar start_urls dinámicamente en el rastreo?
- 9. ¿Cómo agregar el rastreo (simple) en C#?
- 10. Rastreo y depuración en OCaml
- 11. ¿Cuál es la diferencia entre el análisis html y el rastreo web en python?
- 12. ¿Cómo puedo obtener un rastreo en Perl?
- 13. Rastreo de rastreo para un determinado puerto
- 14. Retire la extensión del archivo en Java
- 15. Retire la cadena en el comienzo de una URL
- 16. Retire la transparencia en imágenes con C#
- 17. depurador ipython: rastreo completo en pdb interactivo?
- 18. Retire oyentes marcadores
- 19. Retire el hilo entre 2 caracteres de cadena de texto
- 20. ¿Cómo se ve el rastreo en el servidor xmlrpc, no en el cliente?
- 21. comando desconocido: error de rastreo
- 22. rendimiento de rastreo de teclas en JavaScript objeto
- 23. Rastreo de pila nativa en ICS?
- 24. lotes: Retire extensión de archivo
- 25. iPhone aurioTouch ejemplo: Retire DC
- 26. ¿Cómo puedo enviar el número de línea desde el rastreo de Python a vim?
- 27. Android, retire botón personalizado frontera
- 28. alta velocidad de rastreo
- 29. Retire selectores CSS sin usar
- 30. Retire y archivo de extensión
Es fundamentalmente incorrecto salir con el estado 0 dado que se señala SIGINT. El estado de salida devuelto idealmente debe conservarse, como si la excepción no se detectara. El comentario "o 1" no es lo suficientemente bueno; se espera un ** código de salida de 1 **. –
@ A-B-B se espera un código de salida de 1 si salir del programa con Ctrl-C no es la forma estándar de salir de él sin errores. Si este método de salir representa el éxito, entonces cero es el código de salida esperado. El hecho de que sea una mala idea usar Ctrl-C de esta manera no significa que las personas no lo hagan (y he usado programas que sí lo hacen). – agf
Claro, pero incluir un código de salida de 0 como opción predeterminada en su respuesta todavía parece dudoso. –