Как избежать печати ^ C после обработки KeyboardInterrupt

Сегодня утром я решил обработать прерывание клавиатуры в своей серверной программе и выйти изящно. Я знаю, как это сделать, но мое финишное «я» не находило его достаточно изящным, что ^C все еще печатается. Как я могу не печатать?

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

Нажмите Ctrl + C, чтобы выйти из программы выше и увидеть, что ^C напечатано. Есть ли какая-нибудь sys.stdout или sys.stdin магия, которую я могу использовать?

Это сделает трюк, по крайней мере, в 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) 

Это ваша оболочка делает это, python не имеет к этому никакого отношения.

Если вы поместите следующую строку в ~/.inputrc , она будет подавлять это поведение:

 set echo-control-characters off 

Конечно, я предполагаю, что вы используете bash, что может и не быть.