keyboard "interrupt"

J

John Fisher

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
 
A

Arnaud Delobelle

John said:
Hi Group,

Hi John
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...

If you are on a UNIX platform, you can use the curses module.

http://docs.python.org/lib/module-curses.html

There is a link there to a tutorial, but it seems to be broken. A
quick search finds it there:

http://www.amk.ca/python/howto/curses/

HTH
 
H

Hans Georg Krauthäuser

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top