2011-10-01 10 views
9

Bu sabah, sunucu programımda klavye kesme işlemine karar verdim ve incelikle çıktım. Bunu nasıl yapacağımı biliyorum, ama eşim kendim ^C'un hala yazdırılmaya yetecek kadar zarif olmadığını fark etti. ^C'un yazdırılmasını nasıl önleyebilirim?Nasıl davranılır?^C işlem yaptıktan sonra yazdırılıyor IIddia

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

Ctrl + C Yukarıdaki programın dışına çıkıp ^C baskılı almak görmek için. Kullanabileceğim bazı sys.stdout veya sys.stdin sihir var mı?

+0

Bunu [ 'curses' pakette] şey (kullanarak deneyebilirsiniz http://docs.python.org/library/curses .html), ama önemsiz olduğunu düşünmüyorum (eğer mümkünse). Pencerelerde –

+0

Göremiyorum^C. – akonsu

+1

Ben bash ve csh üzerinde basılan^C görüyorum, ya kabukları ile tutarlı ya da daha düşük (çekirdek) seviyesinde bir şey. –

cevap

0

Bu en azından Linux, hile olacaktır

#! /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

Kabuğunuz bunu yapıyor, pythonun bununla hiçbir ilgisi yok. Sana durum olmayabilir Bash kullandığınız farz ediyorum, Tabii

set echo-control-characters off 

: Eğer ~/.inputrc içine aşağıdaki satırı koyarsanız

, o davranışı bastırır.

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