2011-10-01 8 views
9

Esta mañana decidí manejar la interrupción del teclado en mi programa de servidor y salir con gracia. Sé cómo hacerlo, pero mi ser meticuloso no me pareció lo suficientemente gracioso como para que ^C se imprima. ¿Cómo evito que se imprima ^C?Cómo evitar^C imprimirse después de manejar KeyboardInterrupt

import sys 
from time import sleep 
try: 
    sleep(5) 
except KeyboardInterrupt, ke: 
    sys.exit(0) 

Presione Ctrl + C para salir del programa anterior y ver ^C introducción impresa. ¿Hay alguna magia sys.stdout o sys.stdin que pueda usar?

+0

Usted podría tratar de usar algo en el [ 'paquete curses'] (http://docs.python.org/library/curses .html), pero no creo que sea trivial (si es posible). –

+0

en windows No veo^C. – akonsu

+1

Veo^C impreso en bash y csh, es coherente a través de shells o algo en un nivel inferior (kernel). –

Respuesta

0

Esto va a hacer el truco, al menos en Linux

#! /usr/bin/env python 
import sys 
import termios 
import copy 
from time import sleep 

fd = sys.stdin.fileno() 
old = termios.tcgetattr(fd) 
new = copy.deepcopy(old) 
new[3] = new[3] & ~termios.ECHO 

try: 
    termios.tcsetattr(fd, termios.TCSADRAIN, new) 
    sleep(5) 
except KeyboardInterrupt, ke: 
    pass 
finally: 
    termios.tcsetattr(fd, termios.TCSADRAIN, old) 
    sys.exit(0) 
7

Es su caparazón haciendo eso, Python no tiene nada que ver con eso.

Si ponemos la siguiente línea en ~/.inputrc, se suprimirá ese comportamiento:

set echo-control-characters off 

Por supuesto, estoy asumiendo que usted está utilizando fiesta que puede no ser el caso.

0
try: 
    while True: 
     pass 
except KeyboardInterrupt: 
    print "\r " 
Cuestiones relacionadas