2011-08-09 17 views

Respuesta

18

Eche un vistazo a signal handlers. CTRL-C corresponde a SIGINT (señal n. ° 2 en sistemas posix).

Ejemplo:

#!/usr/bin/env python 
import signal 
import sys 
def signal_handler(signal, frame): 
    print 'You pressed Ctrl+C - or killed me with -2' 
    sys.exit(0) 
signal.signal(signal.SIGINT, signal_handler) 
print 'Press Ctrl+C' 
signal.pause() 
+0

nota: este también debería golpear el manejador de señal cuando 'kill -2 [pid] 'en el OS – wim

+0

@wim, buen punto, gracias, agregué una pista a mi respuesta - ¿hay realmente una manera de distinguir una muerte por el teclado de matar por matar? – miku

+1

He visto que el primero generará una excepción 'KeyboardInterrupt' en python, la última no. Pero no estoy seguro de los detalles de implementación de por qué esto es así. – wim

5

Sure.

try: 
    # Your normal block of code 
except KeyboardInterrupt: 
    # Your code which is executed when CTRL+C is pressed. 
finally: 
    # Your code which is always executed. 
Cuestiones relacionadas