Como desativar Control-C em um programa de console WindowsXP Python?
-
12-09-2019 - |
Pergunta
Eu gostaria de colocar minha janela cmd.com para um modo em Control-C não gera um sinal SIGINT para Python (ActiveState se importa).
Eu sei que posso usar o módulo de sinal para lidar com SIGINT. O problema é que a manipulação SIGINT é tarde demais; no momento em que é tratado, já interrompeu uma chamada de sistema.
Eu gostaria de algo equivalente ao modo de * nix "raw". Apenas deixe a fila de entrada e quando é seguro para a minha candidatura para lê-lo, ele vai.
irritantemente suficiente, msvcrt.getch () parece retornar Control-C como um personagem. Mas isso só funciona enquanto o programa está bloqueado por getch () em si. Se estou em uma outra chamada de sistema (sono, só para usar um exemplo), eu recebo a SIGINT.
Solução
Você precisa chamar a função Win32 API SetConsoleCtrlHandler com NULL (0) como seu primeiro parâmetro e verdadeiro (1) como seu segundo parâmetro. Se você já está usando pywin32, win32.SetConsoleCtrlHandler é bom para o objetivo, caso contrário ctypes deve funcionar, especificamente via ctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1)
/