检查是否按下了箭头键或转义 - 非阻塞

时间:2017-04-29 09:06:54

标签: python linux python-3.x stdin

我正在使用此代码检查用户是否按了箭头键。它工作得很好。现在我还想检查是否按下了Escape键。我只是假设如果它不是箭头键,它必须是Escape键。

它有点工作,问题是当箭头键包含3个字符时,Escape键只有1个字符。这意味着您必须多次按Escape键才能收到回复。

import sys
import select
import tty
import termios
from time import sleep

def is_key_pressed():
    return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])

def reset_terminal(old_settings):
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)


old_settings = termios.tcgetattr(sys.stdin)
try:
    tty.setcbreak(sys.stdin.fileno())

    while True:

        if is_key_pressed():
            char = ord(sys.stdin.read(1))
            if char == 27:
                ch = ord(sys.stdin.read(2)[1])
                if ch in [65, 66, 67, 68]:
                    print("Arrow pressed")
                    continue

                print("Escape pressed")

        sleep(0.1)

finally:
    reset_terminal(old_settings)

我在打印“Escape pressed”之前尝试重置,但它没有用。

0 个答案:

没有答案