compat_win32.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # flake8: noqa: F401
  2. import sys
  3. import numbers
  4. if sys.platform == "win32":
  5. # Avoid import error by code introspection tools such as test runners
  6. # trying to import this module while running on non-Windows systems.
  7. # Compat Popen
  8. if sys.version_info[:2] >= (3, 4):
  9. from multiprocessing.popen_spawn_win32 import Popen
  10. else:
  11. from multiprocessing.forking import Popen
  12. # wait compat
  13. if sys.version_info[:2] < (3, 3):
  14. from ._win_wait import wait
  15. else:
  16. from multiprocessing.connection import wait
  17. # Compat _winapi
  18. if sys.version_info[:2] >= (3, 4):
  19. import _winapi
  20. else:
  21. import os
  22. import msvcrt
  23. if sys.version_info[:2] < (3, 3):
  24. import _subprocess as win_api
  25. from _multiprocessing import win32
  26. else:
  27. import _winapi as win_api
  28. class _winapi:
  29. CreateProcess = win_api.CreateProcess
  30. @staticmethod
  31. def CloseHandle(h):
  32. if isinstance(h, numbers.Integral):
  33. # Cast long to int for 64-bit Python 2.7 under Windows
  34. h = int(h)
  35. if sys.version_info[:2] < (3, 3):
  36. if not isinstance(h, int):
  37. h = h.Detach()
  38. win32.CloseHandle(h)
  39. else:
  40. win_api.CloseHandle(h)