0

Ich möchte mein cmd.com-Fenster in einen Modus versetzen, in dem Control-C kein SIGINT-Signal an Python generiert (ActiveState, wenn es darauf ankommt).Wie deaktiviert man Control-C in einem WindowsXP Python-Konsolenprogramm?

Ich weiß, ich kann das Signalmodul verwenden, um SIGINT zu behandeln. Das Problem ist, dass die Handhabung von SIGINT zu spät ist; Wenn es bearbeitet wird, hat es bereits einen Systemaufruf unterbrochen.

Ich möchte etwas, das dem * nix "rohen" Modus entspricht. Lassen Sie einfach die Eingabewarteschlange hoch und wenn es für meine Anwendung sicher ist, sie zu lesen, wird es.

Verrückt genug, scheint msvcrt.getch() Control-C als ein Zeichen zurückzugeben. Aber das funktioniert nur, solange das Programm von getch() selbst blockiert wird. Wenn ich in einem anderen Systemanruf bin (Schlaf, nur um ein Beispiel zu verwenden), bekomme ich das SIGINT.

Antwort

3

Sie müssen die win32-API-Funktion SetConsoleCtrlHandler mit NULL (0) als ersten Parameter und TRUE (1) als zweiten Parameter aufrufen. Wenn Sie bereits pywin32 verwenden, ist win32.SetConsoleCtrlHandler für diesen Zweck in Ordnung, sonst sollten Ctypes funktionieren, speziell über ctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1)/

+0

Danke! Das scheint zu funktionieren (verhindert, dass der Schlaf unterbrochen wird). Seltsamerweise veranlasst es die interaktive Eingabeaufforderung, mich zu verlassen und mich zurück zum cmd.com-Fenster zu schicken. Das ist kein Problem für meine Anwendung, nur eine Kuriosität. – user135331

+0

Ich sollte sagen, das Verhalten in meinem vorherigen Kommentar war mit Ctypes, kein pywin32, wenn das wichtig ist (oh, und ich bin wieder in der Steinzeit mit Python24 :)). – user135331

+0

@dgou, immer froh zu helfen (wenn eine Antwort entscheidend helfen, Ihr Problem zu lösen, denken Sie daran, es zu akzeptieren: das ist Stapelüberlauf Etikette! -). –