tipos matrices marcadores libreria interactivos graficos grafico graficas graficar estadistica dispersiĆ³n diagrama con barras python

matrices - Detener python usando ctrl+c



python graficos web (8)

Tengo una secuencia de comandos python que usa subprocesos y realiza muchas solicitudes HTTP. Creo que lo que está sucediendo es que mientras una solicitud HTTP (usando urllib2) está leyendo, está bloqueando y no responde a Ctrl C para detener el programa. ¿Hay alguna forma de evitar esto?


El proceso de interrupción depende del hardware y del sistema operativo. Por lo tanto, tendrá un comportamiento muy diferente dependiendo de dónde ejecute su script de python. Por ejemplo, en máquinas Windows tenemos Ctrl + C ( SIGINT ) y Ctrl + Break ( SIGBREAK ).

Entonces, mientras SIGINT está presente en todos los sistemas y puede ser manejado y capturado, la señal SIGBREAK es específica de Windows (y puede ser deshabilitada en CONFIG.SYS ) y es realmente manejada por el BIOS como un vector de interrupción INT 1Bh , por lo que esta clave es mucho más poderoso que cualquier otro. Entonces, si está usando un sistema operativo con * nix, obtendrá diferentes resultados dependiendo de la implementación, ya que esa señal no está presente allí, pero otros sí lo están. En Linux puede verificar qué señales están disponibles para usted de la siguiente manera:

$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGPWR 30) SIGUSR1 31) SIGUSR2 32) SIGRTMAX

Entonces, si desea capturar la signal CTRL+BREAK en un sistema Linux, tendrá que verificar a qué señal POSIX han asignado esa clave. Las asignaciones populares son:

CTRL+/ = SIGQUIT CTRL+D = SIGQUIT CTRL+C = SIGINT CTRL+Z = SIGTSTOP CTRL+BREAK = SIGKILL or SIGTERM or SIGSTOP

De hecho, muchas más funciones están disponibles en Linux, donde la clave SysRq (solicitud de sistema) puede cobrar vida propia ...


En Mac, presiona:

"control" + "/"

para salir de un proceso de pitón conectado a una terminal.


En Windows, la única forma segura es usar Ctrl Break . Detiene cada secuencia de comandos python al instante!

(Tenga en cuenta que en algunos teclados, "Break" está etiquetado como "Pause").


En una terminal mac / in:

  1. Mostrar Inspector (haga clic con el botón derecho dentro de la ventana de la terminal o Shell> Mostrar Inspector)
  2. haga clic en el ícono de Configuración arriba de "procesos en ejecución"
  3. elija de la lista de opciones en "Grupo de proceso de señal" (Kill, terminate, interrupt, etc).

Esta publicación es antigua, pero recientemente me encontré con el mismo problema de CTRL+C no termina con los scripts de Python en mi Linux . SIGQUIT el CTRL + / ( SIGQUIT ).


Presionando Ctrl + c mientras un programa python se está ejecutando hará que python genere una excepción KeyboardInterupt . Es probable que un programa que realiza muchas solicitudes HTTP tenga muchos códigos de manejo de excepciones. Si la parte except del bloque try-except no especifica qué excepciones debería capturar, detectará todas las excepciones, incluido el KeyboardInterupt que acaba de provocar. Un programa python adecuadamente codificado hará uso de la jerarquía de excepciones de python y solo detectará excepciones derivadas de Exception.

#This is the wrong way to do things try: #Some stuff might raise an IO exception except: #Code that ignores errors #This is the right way to do things try: #Some stuff might raise an IO exception except Exception: #This won''t catch KeyboardInterupt

Si no puede cambiar el código (o necesita eliminar el programa para que los cambios surtan efecto), puede intentar presionar Ctrl + c rápidamente. La primera de las excepciones de KeyboardInterupt quitará tu programa del bloque try y con suerte una de las excepciones posteriores de KeyboardInterrupt se generará cuando el programa esté fuera de un bloque try.


Si se está ejecutando en el shell de Python, use Ctrl + Z ; de lo contrario, ubique el proceso de python y elimínelo.


ctrl + q detendrá instantáneamente el código de ejecución y cerrará todas las ventanas.