2011-10-01 89 views
9

今天早上我決定在我的服務器程序中處理鍵盤中斷並優雅地退出。我知道該怎麼做,但我的挑剔的自我並沒有發現它足夠優雅,^C仍然打印。如何避免^C打印?如何在處理KeyboardInterrupt後避免^ C打印

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

按Ctrl + C退出上述程序並看到打印出^C。我可以使用一些sys.stdoutsys.stdin魔法嗎?

+0

你可以嘗試使用在['curses'包]東西(http://docs.python.org/library/curses .html),但我不認爲這是微不足道的(如果可能的話)。在窗戶上的 –

+0

我沒有看到^ C。 – akonsu

+1

我看到^ C打印在bash和csh上,它在shell之間一致或者在較低(內核)級別一致。 –

回答

0

這將這樣的伎倆,至少在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

這是你的shell做的,python與它無關。

如果你把以下行~/.inputrc,它可以抑制這種行爲:

set echo-control-characters off 

當然,我假設你正在使用bash這可能並非如此。

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