【发布时间】:2018-07-26 11:47:13
【问题描述】:
我正在编写一个需要显式解析所有键盘输入的 python 应用程序。因此我写了一个小循环,不断从标准输入读取。这很好用,但是 stdin.read(1) 会阻塞,直到我们输入一个字符。现在我希望它在(例如)1 秒后超时,这样其他事情就可以发生。 我在 python 中阅读了 select 模块,现在我有了以下内容:
def getch(timeout):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
ch = None
try:
tty.setraw(fd)
rlist, _, _ = select([sys.stdin], [], [], timeout)
if len(rlist) > 0:
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
这段代码的问题是,当我按下箭头键时,我只收到'\x1b'。 select 函数永远不会为剩余的 '[' 和 'D' 触发。
如何正确阅读这些箭头键字符?或者我怎样才能再次触发选择功能(因为标准输入上仍有可用数据)。
谢谢!
【问题讨论】:
-
也许keyboard 模块可以帮助您捕获和处理键盘事件?