Я пытаюсь найти значения, которые моя локальная система назначает клавишам со стрелками, в частности, на Python. Для этого я использую следующий script:
import sys,tty,termios
class _Getch:
def __call__(self):
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
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
print 'you pressed', ord(k)
def main():
for i in range(0,25):
get()
if __name__=='__main__':
main()
Затем я запустил script и нажал UP DOWN RIGHT LEFT, который дал мне этот результат:
$ python getchar.py
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68
Это аномально, потому что это говорит о том, что клавиши со стрелкой зарегистрированы как некоторая форма тройки (27-91-6x) в моей системе, так как каждое нажатие клавиши со стрелкой занимает три экземпляра get(). Для сравнения, нажатие a, b, c и CTRL-C дает:
you pressed 97
you pressed 98
you pressed 99
you pressed 3
Может ли кто-нибудь объяснить мне, почему значения моих клавиш-стрелок, кажется, хранятся как тройки? Почему это так? Это одно и то же на всех платформах? (Я использую Debian Linux.) Если нет, как мне нужно хранить значения клавиш со стрелками?
Конечная цель здесь заключается в том, что я пытаюсь написать программу, которая должна правильно распознавать клавиши со стрелками и выполнять функцию в зависимости от того, какая клавиша со стрелкой была нажата.