来自Windows控制台的异步输入通知

时间:2011-03-25 19:26:47

标签: python windows console

我需要异步地从控制台获取用户输入,即没有阻塞。我可以使用以下Python代码来检查是否有可用的输入,但它可以提供100%的CPU负载。

import msvcrt
while not msvcrt.kbhit():
    pass

还有其他办法吗?是否可以在控制台中为键盘事件注册回调函数,例如?

更新:我在Python / ctypes中创建了一个可行的解决方案。请参阅http://techtonik.rainforce.org/2011/03/asynchronous-input-from-windows-console.html

上的示例

3 个答案:

答案 0 :(得分:2)

使用Win32 API,您通常会将WaitForMultipleObjects与其他事件一起调用,以找出最先发生的事件,只要有任何输入可用,就会认为标准输入句柄本身会被触发。

  

A process can specify a console input buffer handle in one of the wait functions to determine when there is unread console input. When the input buffer is not empty, the state of a console input buffer handle is signaled.

所以我建议你看看python是否有这种能力的包装。

答案 1 :(得分:0)

没有办法异步获取控制台输入/输出。

您可以通过睡眠来尝试代码,以防止CPU使用率激增。

答案 2 :(得分:0)

msvcrt。的getch()