0

J'aimerais mettre ma fenêtre cmd.com dans un mode où Control-C ne génère pas de signal SIGINT vers Python (ActiveState si c'est important).Comment désactiver Control-C dans un programme de console WindowsXP Python?

Je sais que je peux utiliser le module de signal pour gérer SIGINT. Le problème est que la gestion de SIGINT est trop tardive; au moment où il est manipulé, il a déjà interrompu un appel système.

Je voudrais quelque chose d'équivalent au mode * raw "". Laissez juste la file d'attente d'entrée et quand il est sûr pour mon application de le lire, il le fera. Assez curieusement, msvcrt.getch() semble retourner Control-C en tant que caractère. Mais cela ne fonctionne que lorsque le programme est bloqué par getch() lui-même. Si je suis dans un autre appel système (sleep, juste pour utiliser un exemple), je reçois le SIGINT.

Répondre

3

Vous devez appeler la fonction d'API win32 SetConsoleCtrlHandler avec son premier paramètre NULL (0) et son deuxième paramètre TRUE (1). Si vous utilisez déjà pywin32, win32.SetConsoleCtrlHandler est bien pour le but, sinon ctypes devrait fonctionner, en particulier via ctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1)/

+0

Merci! Cela semble fonctionner (empêche le sommeil d'être interrompu). Assez curieusement, cela provoque l'invite interactive à quitter et à me renvoyer à la fenêtre cmd.com. Ce n'est pas un problème pour mon application, juste une curiosité. – user135331

+0

Je devrais dire le comportement dans mon commentaire précédent était avec ctypes, pas pywin32, si cela importe (oh, et je suis de retour dans l'âge de pierre avec Python24 :)). – user135331

+0

@dgou, toujours heureux d'aider (si une réponse résolument aider à résoudre votre problème, n'oubliez pas de l'accepter: c'est l'étiquette de débordement de pile!). –

Questions connexes