我已经开始冒险创建一个相对较小的命令行 RPG 来锻炼我新发现的 Python 肌肉,但我已经遇到了一个难题。我正在使用 getch() 的这个实现:
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
key = sys.stdin.read(3)
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
我已key
设置读取 3 个字符以捕获箭头键。例如,Up 读作ESC[A
; 使用这种方法,我可以key[2]
用来确定是否按下了箭头键以及按下了哪个键。一切都很好,除了我还想捕获各种其他键;q
用于任务日志,wasd
用于移动(按各种顺序按箭头将是攻击方法)等等。问题马上就清楚了;如果getch()
只返回一个字符,箭头功能将完全丢失。
如果没有简单的解决方案,我正在考虑完全重新考虑箭头系统,但我几乎可以肯定一定有。诚然,我对 内部发生的事情知之甚少tty
,但我在某处读到,如果您只读取 1 个字符,则箭头按下的多余字符将保留在缓冲区中。我该如何访问所述缓冲区?或者,是否有一些聪明的方法可以告诉stdin
期望输入可变长度?
提前感谢您的任何和所有帮助。