gpt4 book ai didi

python - 是否可以使用 getch() 获取不同长度的输入?

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:02 25 4
gpt4 key购买 nike

我已经着手创建一个相对较小的命令行 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 个字符以捕获箭头键。例如,向上读取为 ESC[A;使用此方法,我可以使用 key[2] 确定是否按下了箭头键以及按下了哪个。一切都很好,除了我还想捕获各种其他键; q 用于任务日志,wasd 用于移动(按不同顺序按箭头将成为攻击方法),等等。问题一目了然;如果 getch() 只返回一个字符,箭头功能将完全丢失。

如果没有简单的解决方案,我正在考虑完全重新考虑箭头系统,但我几乎可以肯定必须有。诚然,我对 tty 中发生的事情知之甚少,但我在某处读到,如果您只读入 1 个字符,则按箭头键产生的多余字符会保留在缓冲区中。我该如何访问所述缓冲区?或者,是否有一些聪明的方法告诉 stdin 期望可变长度的输入?

提前感谢您提供的所有帮助。

最佳答案

不要读三个字。读一个。

如果您刚刚读取的一个字符是 ESC,请读取另外一两个字符,看看它是箭头键还是其他什么。如果它是 q,则执行该操作,然后重新开始。

关于python - 是否可以使用 getch() 获取不同长度的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com