keyboard "interrupt"
Hans Georg Krauthäuser
hgk at ieee.org
Wed Mar 19 04:48:59 EDT 2008
On 18 Mrz., 22:18, johnmfis... at comcast.net (John Fisher) wrote:
> Hi Group,
>
> I have been absent a while, mainly because I have been getting better at
> figuring out my own Python problems. But not this one...
>
> I have a timed loop performing certain tasks until a total period of
> time has elapsed. I would like to be able to interrupt the loop or set
> various flags during execution via keyboard input. raw_input seems to
> just stop everything cold. I want the ability to just sacn the keyboard
> buffer and see if something is there, then proceed normally in the loop
> if there is no input in the buffer. Make sense? Totally easy? Let me
> know...
>
> wave_man
I use this code:
class _Getch:
"""Gets a single character from standard input. Does not echo to
the
screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
try:
self.impl = _GetchUnix()
except ImportError:
self.impl = _GetchMacCarbon()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys, termios # import termios now or else you'll
get the Unix version on the Mac
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return getch()
class _GetchMacCarbon:
"""
A function which returns the current ASCII key that is down;
if no ASCII key is down, the null string is returned. The
page http://www.mactech.com/macintosh-c/chap02-1.html was
very helpful in figuring out how to do this.
"""
def __init__(self):
import Carbon
def __call__(self):
import Carbon
if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the
keyDownMask
return ''
else:
#
# The event contains the following info:
# (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)
[1]
#
# The message (msg) contains the ASCII char which is
# extracted with the 0x000000FF charCodeMask; this
# number is converted to an ASCII character with chr()
and
# returned
#
(what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)
[1]
return chr(msg & 0x000000FF)
Best regards
Hans Georg
More information about the Python-list
mailing list