0

내 cmd.com 창을 Control-C가 Python에 SIGINT 신호를 생성하지 않는 모드 (ActiveState가 중요한 경우)로 설정하고 싶습니다.WindowsXP Python 콘솔 프로그램에서 Control-C를 비활성화하는 방법은 무엇입니까?

신호 모듈을 사용하여 SIGINT를 처리 할 수 ​​있다는 것을 알고 있습니다. 문제는 SIGINT를 처리하는 것이 너무 늦었다는 것입니다. 처리 될 때까지 이미 시스템 호출을 인터럽트했습니다.

* 원시 "원시"모드와 동일한 것을 원합니다. 입력 대기열을 올려 놓고 응용 프로그램이 읽는 것이 안전 할 때까지 기다리십시오.

msvcrt.getch()는 Control-C를 문자로 반환하는 것처럼 보입니다. 그러나 이것은 프로그램이 getch() 자체에 의해 차단되는 동안에 만 작동합니다. 다른 시스템 호출 (잠자기, 그냥 예제 사용)에 있다면, 나는 SIGINT를 얻는다.

답변

3

win32 API 함수 SetConsoleCtrlHandler을 첫 번째 매개 변수로 NULL (0)을, 두 번째 매개 변수로 TRUE (1)로 호출해야합니다. 이미 pywin32를 사용하고 있다면 win32.SetConsoleCtrlHandler은 문제가되지 않습니다. 그렇지 않으면 ctypes가 특히 작동합니다. ctypes.windll.kernel32.SetConsoleCtrlHandler(0, 1)/

+0

감사합니다. 그게 효과가있는 것 같아요. 이상하게도 대화 형 프롬프트가 종료되고 cmd.com 창으로 다시 덤프됩니다. 그것은 내 호응을위한 문제는 아니며 단지 호기심입니다. – user135331

+0

필자의 이전 코멘트에있는 동작은 ctypes, pywin32가 아니라면 문제가된다 (Oh, 나는 파이썬 24로 석기 시대로 돌아왔다. :)). – user135331

+0

@dgou, 언제나 도움이되어 기쁘다. (답이 결정적으로 문제를 해결하는 데 도움이된다면 받아 들여야한다 : 스택 오버플로 에티켓!). –