# NOTE: We intentionally exclude list2cmdline as it is
# considered an internal implementation detail. issue10838.
-_mswindows = sys.platform == "win32"
+# use presence of msvcrt to detect Windows-like platforms (see bpo-8110)
+try:
+ import msvcrt
+except ModuleNotFoundError:
+ _mswindows = False
+else:
+ _mswindows = True
if _mswindows:
- import msvcrt
import _winapi
from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
:mod:`subprocess` now imports Windows-specific imports when
-``sys.platform == "win32"`` and POSIX-specific imports on all other
+``msvcrt`` module is available, and POSIX-specific imports on all other
platforms. This gives a clean exception when ``_posixsubprocess`` is not
-available (e.g. Emscripten browser target) and it's slightly faster, too.
+available (e.g. Emscripten browser target).