所以我的程序在这里使用了wasd或用户的箭头键,否则应该给出错误:
import termios
import tty, sys
def getVal():
old = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
try:
key = ord(sys.stdin.read(1))
while key not in [119, 97, 115, 100, 65, 66, 67, 68]:
print("Please enter w, a, s, or d OR arrow keys only.")
key = ord(sys.stdin.read(1))
if key == 119 or key == 65:
print('up')
elif key == 97 or key == 68:
print('left')
elif key == 115 or key == 66:
print('down')
elif key == 100 or key == 67:
print('right')
finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old)
while True:
getVal()
wasd命令可以正常工作,但是当我尝试执行任何箭头键(在本例中为向下键)时,会发生这种情况:
Please enter w, a, s, or d OR arrow keys only.
Please enter w, a, s, or d OR arrow keys only.
down
它给了我2条错误消息和一条故障消息,即使它只应该给出故障消息。为什么会这样?
答案 0 :(得分:1)
当您按下箭头键(相对于文字键)时,会生成三个值:27(“转义”),91和实际的箭头键(例如68)。如果您读取的第一个值是27,那么您应该读取后两个并且仅解密最后一个。您应该替换此行:
key = ord(sys.stdin.read(1))
具有:
key = ord(sys.stdin.read(1))
if key == 27:
sys.stdin.read(1) # Skip the next character, must be 91
key = ord(sys.stdin.read(1))