annotate Lib/test/win_console_handler.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
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