0

cmd.com ウィンドウを、Control-C が Python への SIGINT シグナルを生成しないモード (重要な場合は ActiveState) に設定したいと考えています。

signal モジュールを使用して SIGINT を処理できることはわかっています。問題は、SIGINT の処理が遅すぎることです。処理されるまでに、すでにシステム コールが中断されています。

*nix の「raw」モードに相当するものが欲しいです。入力をキューに入れるだけで、アプリケーションが安全に読み取れるようになったら、読み取ります。

おかしなことに、msvcrt.getch() は Control-C を文字として返すようです。しかし、それはプログラムが getch() 自体によってブロックされている間のみ機能します。別のシステム コール (スリープ、例を使用するため) にいる場合、SIGINT を取得します。

4

1 に答える 1

4

Win32 API 関数SetConsoleCtrlHandlerを、最初のパラメーターとして NULL (0) を指定し、2 番目のパラメーターとして TRUE (1) を指定して呼び出す必要があります。すでに pywin32 を使用している場合は、win32.SetConsoleCtrlHandlerctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1)で問題ありません。それ以外の場合は、具体的には/を介して ctypes が機能するはずです。

于 2009-08-07T05:51:10.343 に答える