我正在使用getch
代码from this stack overflow question,我写了以下脚本:
getch = _Getch()
while(1):
test = getch()
if test == 'm':
break
else:
print ord(test)
如您所见,它打印每个输入的ascii值。所以示例输出如下所示,其中>>>代表我的意见:
>>>a
97
>>>ctrl-c
3
>>>Esc
27
到目前为止一切顺利,但是当我按箭头键时,它给了我:
>>>(Left arrow)
27
91
66
>>>(right arrow)
27
91
67
所以我可以看到27是escape char
,但是91是什么? 66和67必须是此的子值。
我正在寻找值,以便我可以实现它们以使用箭头移动光标。我如何在if charvalue ==
场景中使用它?
答案 0 :(得分:0)
您还可以使用select,tty和termios的组合。
import sys, select, tty, termios
class NonBlockingConsole(object):
def __enter__(self):
self.old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
return self
def __exit__(self, type, value, traceback):
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.old_settings)
def get_data(self):
try:
if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
return sys.stdin.read(1)
except KeyboardInterrupt:
return '[CTRL-C]'
return False
with NonBlockingConsole() as nbc:
while 1:
c = nbc.get_data()
if c:
c = c.decode('latin-1', 'replace')
if c == '\x1b': # x1b is ESC
break
elif c in ('\x7f', '\x08'): # backspace
pass
elif c == '[CTRL-C]':
pass
elif c == '\n': # it's RETURN
pass
else:
print('Pushed:',c)
sleep(0.025)
Havn暂时对它进行了测试,目前我在Windows机器上进行测试,但它也可以捕获箭头键(应该)。