From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 7 Apr 2025 06:24:24 +0000 (+0200) Subject: [3.13] gh-129204: Add _PYTHON_SUBPROCESS_USE_POSIX_SPAWN environment knob (GH-132184... X-Git-Tag: v3.13.3~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=68bbdd902630a5f96ab598a8d6ecacee3c2d5d2e;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-129204: Add _PYTHON_SUBPROCESS_USE_POSIX_SPAWN environment knob (GH-132184) (#132191) 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. * fixup NEWS entry --------- (cherry picked from commit 4c5dcc6d8292d5142aff8401cb9b9d18b49c6c89) Signed-off-by: Vincent Fazio Co-authored-by: Vincent Fazio --- diff --git a/Lib/subprocess.py b/Lib/subprocess.py index f614c903c883..4a9a64e55779 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 000000000000..d8994bf760b7 --- /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`.