Mercurial > cpython-lru_cache-weakref
annotate Lib/test/win_console_handler.py @ 73798:6cde416ef03b
Credit Per Øyvind Karlsen for the initial implementation of the lzma module (issue #6715).
| author | Nadeem Vawda <nadeem.vawda@gmail.com> |
|---|---|
| date | Thu, 01 Dec 2011 01:18:27 +0200 |
| parents | 169bf01bb507 |
| children |
| 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 |
