我正在使用此代码检查用户是否按了箭头键。它工作得很好。现在我还想检查是否按下了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”之前尝试重置,但它没有用。