summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2022-01-17 06:23:36 (GMT)
committerGitHub <noreply@github.com>2022-01-17 06:23:36 (GMT)
commit7f4b69b9076bdbcea31f6ad16eb125ee99cf0175 (patch)
treebca8970e65dbc9489ac1033eb2ddd56d6ef728c5
parent91e33ac3d08a1c6004c469da2c0e2a97b5bdc53c (diff)
downloadcpython-7f4b69b9076bdbcea31f6ad16eb125ee99cf0175.zip
cpython-7f4b69b9076bdbcea31f6ad16eb125ee99cf0175.tar.gz
cpython-7f4b69b9076bdbcea31f6ad16eb125ee99cf0175.tar.bz2
bpo-40280: Change subprocess imports for cleaner error on wasm32 (GH-30620)
-rw-r--r--Lib/subprocess.py15
-rw-r--r--Misc/NEWS.d/next/Library/2022-01-16-14-07-14.bpo-40280.LtFHfF.rst4
2 files changed, 11 insertions, 8 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 33f022f..358f49a 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -65,16 +65,11 @@ __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
# NOTE: We intentionally exclude list2cmdline as it is
# considered an internal implementation detail. issue10838.
-try:
+_mswindows = sys.platform == "win32"
+
+if _mswindows:
import msvcrt
import _winapi
- _mswindows = True
-except ModuleNotFoundError:
- _mswindows = False
- import _posixsubprocess
- import select
- import selectors
-else:
from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
STD_ERROR_HANDLE, SW_HIDE,
@@ -95,6 +90,10 @@ else:
"NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
"CREATE_NO_WINDOW", "DETACHED_PROCESS",
"CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
+else:
+ import _posixsubprocess
+ import select
+ import selectors
# Exception classes used by this module.
diff --git a/Misc/NEWS.d/next/Library/2022-01-16-14-07-14.bpo-40280.LtFHfF.rst b/Misc/NEWS.d/next/Library/2022-01-16-14-07-14.bpo-40280.LtFHfF.rst
new file mode 100644
index 0000000..b7bd7ab
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-01-16-14-07-14.bpo-40280.LtFHfF.rst
@@ -0,0 +1,4 @@
+:mod:`subprocess` now imports Windows-specific imports when
+``sys.platform == "win32"`` 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.