繁体   English   中英

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

[英]Python MacOS Terminal: Keyboard Arrow keys in raw_input()

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

在终端中按输出^[[A在其中,所以我假设这是转义键序列。

但是,在raw_input()提示符下按RETURN似乎不会产生可以调节的字符串:

string = raw_input('Press ↑ Key: ')

if string == '^[[A':
    print '↑'         # This doesn't happen.

如何才能做到这一点?

请注意,我并没有尝试输入 shell 中前一行的任何内容(我认为这是import readline管理的)。 我只想检测以某种方式输入了键盘上的箭头键。

我认为您正在寻找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()

当我尝试类似的东西时:

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

它消除了打印语句的“\\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!"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM