annotate Lib/test/win_console_handler.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents acdb32005c0a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
60199
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
1 """Script used to test os.kill on Windows, for issue #1220212
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
2
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
3 This script is started as a subprocess in test_os and is used to test the
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
4 CTRL_C_EVENT and CTRL_BREAK_EVENT signals, which requires a custom handler
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
5 to be written into the kill target.
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
6
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
7 See http://msdn.microsoft.com/en-us/library/ms685049%28v=VS.85%29.aspx for a
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
8 similar example in C.
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
9 """
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
10
65017
a430f8fec4a0 Merged revisions 85109 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 60371
diff changeset
11 from ctypes import wintypes, WINFUNCTYPE
60199
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
12 import signal
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
13 import ctypes
65176
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
14 import mmap
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
15 import sys
60199
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
16
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
17 # Function prototype for the handler function. Returns BOOL, takes a DWORD.
65017
a430f8fec4a0 Merged revisions 85109 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 60371
diff changeset
18 HandlerRoutine = WINFUNCTYPE(wintypes.BOOL, wintypes.DWORD)
60199
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
19
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
20 def _ctrl_handler(sig):
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
21 """Handle a sig event and return 0 to terminate the process"""
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
22 if sig == signal.CTRL_C_EVENT:
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
23 pass
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
24 elif sig == signal.CTRL_BREAK_EVENT:
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
25 pass
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
26 else:
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
27 print("UNKNOWN EVENT")
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
28 return 0
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
29
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
30 ctrl_handler = HandlerRoutine(_ctrl_handler)
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
31
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
32
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
33 SetConsoleCtrlHandler = ctypes.windll.kernel32.SetConsoleCtrlHandler
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
34 SetConsoleCtrlHandler.argtypes = (HandlerRoutine, wintypes.BOOL)
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
35 SetConsoleCtrlHandler.restype = wintypes.BOOL
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
36
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
37 if __name__ == "__main__":
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
38 # Add our console control handling function with value 1
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
39 if not SetConsoleCtrlHandler(ctrl_handler, 1):
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
40 print("Unable to add SetConsoleCtrlHandler")
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
41 exit(-1)
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
42
65176
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
43 # Awaken mail process
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
44 m = mmap.mmap(-1, 1, sys.argv[1])
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
45 m[0] = '1'
acdb32005c0a Merged revisions 85315 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65017
diff changeset
46
60199
d4799ee64c23 set svn:eol-style on new file
Benjamin Peterson <benjamin@python.org>
parents: 60197
diff changeset
47 # Do nothing but wait for the signal
60371
9fd8852ecdd4 Fix a failing test on an apparently slow Windows buildbot.
Brian Curtin <brian.curtin@gmail.com>
parents: 60199
diff changeset
48 while True:
9fd8852ecdd4 Fix a failing test on an apparently slow Windows buildbot.
Brian Curtin <brian.curtin@gmail.com>
parents: 60199
diff changeset
49 pass