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

Hex*_*ory 3 python input getch

我已经开始创建一个相对较小的命令行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)
Run Code Online (Sandbox Code Playgroud)

我已经key设置读取3个字符来捕获箭头键.例如,读取为ESC[A; 使用这种方法,我可以key[2]用来确定是否按下了箭头键和哪一个.一切都很好,除了我还想捕获各种其他键; q对于任务日志,wasd对于移动(按各种顺序的箭头将是攻击的方法),以及许多其他.问题很明显; 如果getch()仅返回单个字符,箭头功能将完全丢失.

如果没有简单的解决方案,我正在考虑完全重新考虑箭头系统,但我几乎肯定必须有.不可否认,我对其中发生的事情知之甚少tty,但我在某处读到,如果你只读了1个字符,那么箭头按下的多余字符将保留在缓冲区中.我怎么去访问所说的缓冲区?或者,是否有一些聪明的方法stdin来指望可变长度的输入?

提前感谢您提供任何和所有帮助.

Sin*_*ion 5

不要读三个字.读一个.

如果您刚刚阅读的是一个字符ESC,请阅读另一个或两个字符以查看它是否为箭头键或其他任何字符.如果它是a q,为此做点什么,然后重新开始.

  • 但是如何单独阅读"ESC"?在这种情况下,`read(2)`将被阻止,直到你按下其他键. (2认同)