Мне нужно получить пользовательский ввод с консоли асинхронно, то есть без блокировки. Я мог бы использовать следующий код Python, чтобы проверить, есть ли доступный ввод, но он дает 100% загрузку процессора.
import msvcrt while not msvcrt.kbhit(): pass
Есть ли другой способ сделать это? Можно ли зарегистрировать функцию обратного вызова для событий клавиатуры в консоли, например?
ОБНОВЛЕНИЕ: я создал рабочее решение в Python / ctypes. Смотрите пример на http://techtonik.rainforce.org/2011/03/asynchronous-input-from-windows-console.html
Используя Win32 API, вы обычно вызываете WaitForMultipleObjects вместе с другими вашими событиями, чтобы выяснить, что произошло первым, сам стандартный дескриптор ввода будет считаться сработавшим всякий раз, когда какой-либо вход будет доступен.
WaitForMultipleObjects
Процесс может указать дескриптор буфера ввода консоли в одной из функций ожидания, чтобы определить, когда есть непрочитанный ввод с консоли.Когда входной буфер не пустой, сигнализируется состояние дескриптора входного буфера консоли.
Так что я бы посоветовал вам посмотреть и посмотреть, есть ли в Python обертка для этой способности.
MSVCRT .getch ()
Невозможно асинхронно получить консольный ввод / вывод.
Вы можете попробовать свой код в режиме сна, чтобы предотвратить скачок загрузки процессора.