Io Lua:无阻塞地获取键盘输入

Io Lua:无阻塞地获取键盘输入,io,lua,nonblocking,Io,Lua,Nonblocking,我已经开始在Lua上做一个小项目,包括制作一个基于文本的界面,它可以不断更新,并允许键盘输入进行交互 我需要一种获取键盘输入的方法,但我也需要它要么不阻塞,要么有某种超时(最好设置为几分之一秒)。我自己也做过研究,但没有发现对我有用的东西 我需要一些能与Lua5.1.5和Linux一起工作的东西。Windows兼容性会很好,但这不是一项要求,因为我也在做一些需要ANSI终端的事情。正如hyde在我的帖子评论中所说的,我可以使用Lua包装器为ncurses获取输入。除此之外,我还可以将它的特性用于

我已经开始在Lua上做一个小项目,包括制作一个基于文本的界面,它可以不断更新,并允许键盘输入进行交互

我需要一种获取键盘输入的方法,但我也需要它要么不阻塞,要么有某种超时(最好设置为几分之一秒)。我自己也做过研究,但没有发现对我有用的东西


我需要一些能与Lua5.1.5和Linux一起工作的东西。Windows兼容性会很好,但这不是一项要求,因为我也在做一些需要ANSI终端的事情。

正如hyde在我的帖子评论中所说的,我可以使用Lua包装器为ncurses获取输入。除此之外,我还可以将它的特性用于我的代码的其他部分,这些部分我本来打算自己编写

我在Lua5.1中使用Luasocket实现了这一点,并打开了两个单独的Lua进程。我有两个Lua控制台窗口-“输入窗口”和“输出窗口”。输入窗口通过本地主机发送按键。输出窗口读取我用于此操作的本地主机套接字。它是非阻塞的;您可以在udp接收上设置非常快的超时。这很难看,但这是我找到的最普通的解决办法。也就是说,输入窗口中的输入数据不会出现在输出窗口上(除非我希望它出现),这对于基于控制台的UI来说很好。

试试ncurses,它必须有一个Lua包装器。@hyde我不想依赖ncurses,但看起来我不得不依赖它。谢谢你的建议!直到你说出来我才想到它。你也可以使用select/poll C库函数,Lua确实提供了这个功能。使用它,您可以检查是否可以在不阻塞的情况下从套接字读取,然后仅在有需要读取的内容时读取。但它在Windows上不起作用(Windows stdin不是真正的文件/套接字)。哦,是的,对于标准输入,您可能必须禁用缓冲,否则您的应用程序在用户按enter键之前将无法获取任何内容,因为终端上的默认行缓冲。有了ncurses或类似的libs,你不必担心这一点,我认为它们是为你做的。