annotate Lib/test/win_console_handler.py @ 71285:8bc9dbc61ba6 3.2

Issue #12326: document the recommended idiom for checking sys.platform on Unix systems. Also, point to the various alternatives.
author Antoine Pitrou <solipsis@pitrou.net>
date Sat, 09 Jul 2011 15:54:23 +0200
parents 169bf01bb507
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
60556
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
1 """Script used to test os.kill on Windows, for issue #1220212
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
2
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
3 This script is started as a subprocess in test_os and is used to test the
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
4 CTRL_C_EVENT and CTRL_BREAK_EVENT signals, which requires a custom handler
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
5 to be written into the kill target.
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
6
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
7 See http://msdn.microsoft.com/en-us/library/ms685049%28v=VS.85%29.aspx for a
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
8 similar example in C.
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
9 """
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
10
65016
25e8b7827c7d Fix #9978. WINFUNCTYPE is from ctypes, not from ctypes.wintypes.
Brian Curtin <brian.curtin@gmail.com>
parents: 60556
diff changeset
11 from ctypes import wintypes, WINFUNCTYPE
60556
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
12 import signal
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
13 import ctypes
65173
a14e074fa42f Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65016
diff changeset
14 import mmap
a14e074fa42f Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65016
diff changeset
15 import sys
60556
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
16
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
17 # Function prototype for the handler function. Returns BOOL, takes a DWORD.
65016
25e8b7827c7d Fix #9978. WINFUNCTYPE is from ctypes, not from ctypes.wintypes.
Brian Curtin <brian.curtin@gmail.com>
parents: 60556
diff changeset
18 HandlerRoutine = WINFUNCTYPE(wintypes.BOOL, wintypes.DWORD)
60556
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
19
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
20 def _ctrl_handler(sig):
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
21 """Handle a sig event and return 0 to terminate the process"""
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
22 if sig == signal.CTRL_C_EVENT:
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
23 pass
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
24 elif sig == signal.CTRL_BREAK_EVENT:
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
25 pass
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
26 else:
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
27 print("UNKNOWN EVENT")
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
28 return 0
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
29
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
30 ctrl_handler = HandlerRoutine(_ctrl_handler)
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
31
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
32
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
33 SetConsoleCtrlHandler = ctypes.windll.kernel32.SetConsoleCtrlHandler
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
34 SetConsoleCtrlHandler.argtypes = (HandlerRoutine, wintypes.BOOL)
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
35 SetConsoleCtrlHandler.restype = wintypes.BOOL
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
36
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
37 if __name__ == "__main__":
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
38 # Add our console control handling function with value 1
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
39 if not SetConsoleCtrlHandler(ctrl_handler, 1):
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
40 print("Unable to add SetConsoleCtrlHandler")
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
41 exit(-1)
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
42
66803
169bf01bb507 Fixed typo in comment.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65173
diff changeset
43 # Awake main process
65173
a14e074fa42f Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65016
diff changeset
44 m = mmap.mmap(-1, 1, sys.argv[1])
a14e074fa42f Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65016
diff changeset
45 m[0] = 1
a14e074fa42f Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os)
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65016
diff changeset
46
60556
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
47 # Do nothing but wait for the signal
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
48 while True:
a2f5b3b19eb2 Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
diff changeset
49 pass