Как отключить Control-C в консольной программе Python для WindowsXP? - PullRequest
0 голосов
/ 07 августа 2009

Я хотел бы перевести окно cmd.com в режим, в котором Control-C не генерирует сигнал SIGINT для Python (ActiveState, если это имеет значение).

Я знаю, что могу использовать сигнальный модуль для обработки SIGINT. Проблема в том, что обработка SIGINT слишком поздняя; к моменту обработки он уже прервал системный вызов.

Я бы хотел что-то эквивалентное * nix «сырому» режиму. Просто дайте входной очереди встать в очередь, и когда мое приложение сможет ее прочитать, оно будет.

Как ни странно, msvcrt.getch (), похоже, возвращает Control-C как символ. Но это работает только тогда, когда программа заблокирована самой getch (). Если я нахожусь в другом системном вызове (сон, просто в качестве примера), я получаю SIGINT.

1 Ответ

3 голосов
/ 07 августа 2009

Вам нужно вызвать функцию win32 API SetConsoleCtrlHandler с NULL (0) в качестве первого параметра и TRUE (1) в качестве второго параметра. Если вы уже используете pywin32, win32.SetConsoleCtrlHandler подходит для этой цели, в противном случае ctypes должен работать, особенно через ctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1) /

...