Уведомление асинхронного ввода из консоли Windows - PullRequest
0 голосов
/ 25 марта 2011

Мне нужно получить пользовательский ввод с консоли асинхронно, то есть без блокировки. Я мог бы использовать следующий код Python, чтобы проверить, есть ли доступный ввод, но он дает 100% загрузку процессора.

import msvcrt
while not msvcrt.kbhit():
    pass

Есть ли другой способ сделать это? Можно ли зарегистрировать функцию обратного вызова для событий клавиатуры в консоли, например?

ОБНОВЛЕНИЕ: я создал рабочее решение в Python / ctypes. Смотрите пример на http://techtonik.rainforce.org/2011/03/asynchronous-input-from-windows-console.html

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Используя Win32 API, вы обычно вызываете WaitForMultipleObjects вместе с другими вашими событиями, чтобы выяснить, что произошло первым, сам стандартный дескриптор ввода будет считаться сработавшим всякий раз, когда какой-либо вход будет доступен.

Процесс может указать дескриптор буфера ввода консоли в одной из функций ожидания, чтобы определить, когда есть непрочитанный ввод с консоли.Когда входной буфер не пустой, сигнализируется состояние дескриптора входного буфера консоли.

Так что я бы посоветовал вам посмотреть и посмотреть, есть ли в Python обертка для этой способности.

0 голосов
/ 25 марта 2011

MSVCRT .getch ()

0 голосов
/ 25 марта 2011

Невозможно асинхронно получить консольный ввод / вывод.

Вы можете попробовать свой код в режиме сна, чтобы предотвратить скачок загрузки процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...