Python MacOS终端:raw_input()中的键盘箭头键



使用Python 2.7,我希望我的程序接受键盘箭头键,例如,同时输入到MacOS终端。

按下↑在其中输出^[[A,所以我假设这是转义密钥序列。

但是,按下RETURNraw_input()提示符下似乎不会产生一个可以被条件化的字符串:

string = raw_input('Press ↑ Key: ')
if string == '^[[A':
print '↑'         # This doesn't happen.

如何做到这一点?

请注意,我并没有试图输入shell中前一行的内容(我认为这是import readline管理的(。我只是想检测一下键盘上的箭头键是怎么输入的。

当我尝试类似以下内容时:

% cat test.py
char = raw_input()
print("nInput char is [%s]." % char)
% python a.py
^[[A
].

它去掉了print语句中的"\Input char-is["部分。raw_input((似乎没有接收转义字符。终端程序正在捕捉转义的按键并使用它来操纵屏幕。您将不得不使用较低级别的程序来捕捉这些字符。看看在Python中查找箭头键的值:为什么它们是三元组?关于如何获得这些按键的帮助。

根据目前接受的答案:

if k=='x1b[A':
print "up"
elif k=='x1b[B':
print "down"
elif k=='x1b[C':
print "right"
elif k=='x1b[D':
print "left"
else:
print "not an arrow key!"

我认为您正在寻找pynput.keyboard.Listener,它允许您监控键盘,并根据按下的键采取不同的操作。它可用于Python 2.7。

这个例子是一个很好的入门方法:

from pynput import keyboard
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(
key.char))
except AttributeError:
print('special key {0} pressed'.format(
key))
def on_release(key):
print('{0} released'.format(
key))
if key == keyboard.Key.esc:
# Stop listener
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
# ...or, in a non-blocking fashion:
listener = keyboard.Listener(
on_press=on_press,
on_release=on_release)
listener.start()

最新更新