diff options
Diffstat (limited to 'lib/python2.7/test/win_console_handler.py')
-rw-r--r-- | lib/python2.7/test/win_console_handler.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/python2.7/test/win_console_handler.py b/lib/python2.7/test/win_console_handler.py new file mode 100644 index 0000000..0ffcee2 --- /dev/null +++ b/lib/python2.7/test/win_console_handler.py @@ -0,0 +1,49 @@ +"""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, WINFUNCTYPE +import signal +import ctypes +import mmap +import sys + +# Function prototype for the handler function. Returns BOOL, takes a DWORD. +HandlerRoutine = 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) + + # Awaken mail process + m = mmap.mmap(-1, 1, sys.argv[1]) + m[0] = '1' + + # Do nothing but wait for the signal + while True: + pass |