diff options
author | Brian Curtin <brian.curtin@gmail.com> | 2010-04-12 17:16:38 (GMT) |
---|---|---|
committer | Brian Curtin <brian.curtin@gmail.com> | 2010-04-12 17:16:38 (GMT) |
commit | eb24d7498f3e34586fee24209f5630a58bb1a04b (patch) | |
tree | 2618500362c3b75e9ff541971954b57d14d66a86 /Lib/test/win_console_handler.py | |
parent | b2416e54b15d90b4a1bc917897912061830b42fc (diff) | |
download | cpython-eb24d7498f3e34586fee24209f5630a58bb1a04b.zip cpython-eb24d7498f3e34586fee24209f5630a58bb1a04b.tar.gz cpython-eb24d7498f3e34586fee24209f5630a58bb1a04b.tar.bz2 |
Port #1220212 (os.kill for Win32) to py3k.
Diffstat (limited to 'Lib/test/win_console_handler.py')
-rw-r--r-- | Lib/test/win_console_handler.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Lib/test/win_console_handler.py b/Lib/test/win_console_handler.py new file mode 100644 index 0000000..17bbe1a --- /dev/null +++ b/Lib/test/win_console_handler.py @@ -0,0 +1,43 @@ +"""Script used to test os.kill on Windows, for issue #1220212 + +This script is started as a subprocess in test_os and is used to test the +CTRL_C_EVENT and CTRL_BREAK_EVENT signals, which requires a custom handler +to be written into the kill target. + +See http://msdn.microsoft.com/en-us/library/ms685049%28v=VS.85%29.aspx for a +similar example in C. +""" + +from ctypes import wintypes +import signal +import ctypes + +# Function prototype for the handler function. Returns BOOL, takes a DWORD. +HandlerRoutine = wintypes.WINFUNCTYPE(wintypes.BOOL, wintypes.DWORD) + +def _ctrl_handler(sig): + """Handle a sig event and return 0 to terminate the process""" + if sig == signal.CTRL_C_EVENT: + pass + elif sig == signal.CTRL_BREAK_EVENT: + pass + else: + print("UNKNOWN EVENT") + return 0 + +ctrl_handler = HandlerRoutine(_ctrl_handler) + + +SetConsoleCtrlHandler = ctypes.windll.kernel32.SetConsoleCtrlHandler +SetConsoleCtrlHandler.argtypes = (HandlerRoutine, wintypes.BOOL) +SetConsoleCtrlHandler.restype = wintypes.BOOL + +if __name__ == "__main__": + # Add our console control handling function with value 1 + if not SetConsoleCtrlHandler(ctrl_handler, 1): + print("Unable to add SetConsoleCtrlHandler") + exit(-1) + + # Do nothing but wait for the signal + while True: + pass |