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.

Foi útil?

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) /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top