Как не печатать ^ C после обработки KeyboardInterrupt - PullRequest
9 голосов
/ 01 октября 2011

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

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

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

Ответы [ 3 ]

8 голосов
/ 01 октября 2011

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

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

set echo-control-characters off

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

3 голосов
/ 11 февраля 2018
try:
    while True:
        pass
except KeyboardInterrupt:
    print "\r  "
1 голос
/ 01 октября 2011

Это поможет, по крайней мере, в 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)
...