编程语言
首页 > 编程语言> > python – 是否可以使用getch()来获取不同长度的输入?

python – 是否可以使用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)

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

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

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

解决方法:

不要读三个字.读一个.

如果您刚读取的一个字符是ESC,请读取另一个或两个字符以查看它是否为箭头键或其他任何字符.如果它是一个q,做那件事然后重新开始.

标签:getch,python,input
来源: https://codeday.me/bug/20190903/1794751.html