]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-90473: Fail subprocess early on Emscripten/WASI (GH-92802)
authorChristian Heimes <christian@python.org>
Sat, 14 May 2022 18:23:19 +0000 (20:23 +0200)
committerGitHub <noreply@github.com>
Sat, 14 May 2022 18:23:19 +0000 (20:23 +0200)
Lib/subprocess.py
Misc/NEWS.d/next/Library/2022-05-14-11-41-23.gh-issue-90473.kPdOZl.rst [new file with mode: 0644]

index 6e61cc2e5e7b08624cf6ade2aefb080b9ca666c5..e10b01047ebef5f4357182c911c6be4aa67e7f30 100644 (file)
@@ -74,6 +74,9 @@ except ModuleNotFoundError:
 else:
     _mswindows = True
 
+# wasm32-emscripten and wasm32-wasi do not support processes
+_can_fork_exec = sys.platform not in {"emscripten", "wasi"}
+
 if _mswindows:
     import _winapi
     from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
@@ -97,13 +100,10 @@ if _mswindows:
                     "CREATE_NO_WINDOW", "DETACHED_PROCESS",
                     "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
 else:
-    if sys.platform in {"emscripten", "wasi"}:
-        def _fork_exec(*args, **kwargs):
-            raise OSError(
-                errno.ENOTSUP, f"{sys.platform} does not support processes."
-            )
-    else:
+    if _can_fork_exec:
         from _posixsubprocess import fork_exec as _fork_exec
+    else:
+        _fork_exec = None
     import select
     import selectors
 
@@ -801,6 +801,11 @@ class Popen:
                  encoding=None, errors=None, text=None, umask=-1, pipesize=-1,
                  process_group=None):
         """Create new Popen instance."""
+        if not _can_fork_exec:
+            raise OSError(
+                errno.ENOTSUP, f"{sys.platform} does not support processes."
+            )
+
         _cleanup()
         # Held while anything is calling waitpid before returncode has been
         # updated to prevent clobbering returncode if wait() or poll() are
diff --git a/Misc/NEWS.d/next/Library/2022-05-14-11-41-23.gh-issue-90473.kPdOZl.rst b/Misc/NEWS.d/next/Library/2022-05-14-11-41-23.gh-issue-90473.kPdOZl.rst
new file mode 100644 (file)
index 0000000..bf5ee54
--- /dev/null
@@ -0,0 +1,2 @@
+:mod:`subprocess` now fails early on Emscripten and WASI platforms to work
+around missing :func:`os.pipe` on WASI.