You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.5 KiB
66 lines
1.5 KiB
6 years ago
|
class _GetCh:
|
||
|
def __init__(self):
|
||
|
try:
|
||
|
self.impl = _GetChWindows()
|
||
|
except ImportError:
|
||
|
try:
|
||
|
self.impl = _GetChMacCarbon()
|
||
|
except ImportError:
|
||
|
self.impl = _GetChUnix()
|
||
|
def __call__(self):
|
||
|
return self.impl()
|
||
|
|
||
|
class _GetChWindows:
|
||
|
def __init__(self):
|
||
|
import msvcrt
|
||
|
def __call__(self):
|
||
|
import msvcrt
|
||
|
if msvcrt.kbhit():
|
||
|
while msvcrt.kbhit():
|
||
|
ch = msvcrt.getch()
|
||
|
while ch in b'\x00\xe0':
|
||
|
msvcrt.getch()
|
||
|
ch = msvcrt.getch()
|
||
|
return ord( ch.decode() )
|
||
|
else:
|
||
|
return -1
|
||
|
|
||
|
class _GetChMacCarbon:
|
||
|
def __init__(self):
|
||
|
import Carbon
|
||
|
Carbon.Evt
|
||
|
def __call__(self):
|
||
|
import Carbon
|
||
|
if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask
|
||
|
return ""
|
||
|
else:
|
||
|
(what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
|
||
|
return msg & 0x000000FF
|
||
|
|
||
|
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 ord(ch)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
InKey = _GetCh()
|
||
|
|
||
|
print( "Press Ctrl-C to exit" )
|
||
|
|
||
|
c = InKey()
|
||
|
while c != 3:
|
||
|
if c >= 0:
|
||
|
print( c )
|
||
|
c = InKey()
|