2011-10-01 17 views
9

今朝私はサーバプログラムでキーボード割り込みを処理して正常に終了することに決めました。私はそれを行う方法を知っていますが、私のこっそりした自己は、それでも^Cが印刷されるほど優雅ではありませんでした。 ^Cはどうやって印刷されますか?回避方法^ Cの処理後に印刷するKeyboardInterrupt

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

でCtrl + Cは、上記のプログラムから抜け出すと^Cがプリントなっ確認してください。私は使用できるsys.stdoutまたはsys.stdinの魔法がありますか?

+0

にあなたは[ 'curses'パッケージ](http://docs.python.org/library/cursesで何かを使用して試みることができます.html)、しかし私はそれが(すべて可能であれば)それは自明ではないと思います。ウィンドウ上の –

+0

私は^ Cが表示されません。 – akonsu

+1

私は^ Cがbashとcshに出力されているのを見ています。そのシェルは一貫しているか、より低い(カーネル)レベルのものです。 –

答えて

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

これはあなたのシェルであり、Pythonはそれとは関係ありません。

あなたは~/.inputrcに以下の行を入れた場合、それはその動作を抑制します:もちろん

set echo-control-characters off 

、私はあなたがそうでないかもしれないのbashを使っていると仮定しています。

0
try: 
    while True: 
     pass 
except KeyboardInterrupt: 
    print "\r " 
関連する問題