From 458033a4046eabad4fc70c3b5428089f96649808 Mon Sep 17 00:00:00 2001 From: Vincent Fazio Date: Sun, 6 Apr 2025 22:53:02 -0500 Subject: [PATCH] gh-129204: Add _PYTHON_SUBPROCESS_USE_POSIX_SPAWN environment knob (GH-132184) * Add _PYTHON_SUBPROCESS_USE_POSIX_SPAWN environment knob Add support for disabling the use of `posix_spawn` via a variable in the process environment. While it was previously possible to toggle this by modifying the value of `subprocess._USE_POSIX_SPAWN`, this required either patching CPython or modifying it within the interpreter instance which is not always possible, such as when running applications or scripts not under a user's control. Signed-off-by: Vincent Fazio * fixup NEWS entry --------- (cherry picked from commit 4c5dcc6d8292d5142aff8401cb9b9d18b49c6c89) Co-authored-by: Vincent Fazio Signed-off-by: Vincent Fazio --- Lib/subprocess.py | 3 +++ .../Library/2025-04-06-19-25-12.gh-issue-129204.sAVFO6.rst | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2025-04-06-19-25-12.gh-issue-129204.sAVFO6.rst diff --git a/Lib/subprocess.py b/Lib/subprocess.py index f614c903c8837c..4a9a64e5577989 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -715,6 +715,9 @@ def _use_posix_spawn(): # os.posix_spawn() is not available return False + if ((_env := os.environ.get('_PYTHON_SUBPROCESS_USE_POSIX_SPAWN')) in ('0', '1')): + return bool(int(_env)) + if sys.platform in ('darwin', 'sunos5'): # posix_spawn() is a syscall on both macOS and Solaris, # and properly reports errors diff --git a/Misc/NEWS.d/next/Library/2025-04-06-19-25-12.gh-issue-129204.sAVFO6.rst b/Misc/NEWS.d/next/Library/2025-04-06-19-25-12.gh-issue-129204.sAVFO6.rst new file mode 100644 index 00000000000000..d8994bf760b7bc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-04-06-19-25-12.gh-issue-129204.sAVFO6.rst @@ -0,0 +1,2 @@ +Introduce new ``_PYTHON_SUBPROCESS_USE_POSIX_SPAWN`` environment variable knob in +:mod:`subprocess` to control the use of :func:`os.posix_spawn`.