[Python-checkins] gh-96305: Fix AIX build by avoiding subprocess during bootstrap (#96429)

gpshead webhook-mailer at python.org
Thu Feb 2 15:30:57 EST 2023


https://github.com/python/cpython/commit/ba4731d149185894c77d201bc5804da90ff45eee
commit: ba4731d149185894c77d201bc5804da90ff45eee
branch: main
author: Ayappan Perumal <ayappap2 at in.ibm.com>
committer: gpshead <greg at krypto.org>
date: 2023-02-02T12:30:49-08:00
summary:

gh-96305: Fix AIX build by avoiding subprocess during bootstrap (#96429)

* Fix AIX build by avoiding `subprocess` during bootstrap.

files:
A Misc/NEWS.d/next/Build/2022-08-30-10-16-31.gh-issue-96305.274i8B.rst
M Lib/_aix_support.py

diff --git a/Lib/_aix_support.py b/Lib/_aix_support.py
index 18533e769b75..dadc75c2bf42 100644
--- a/Lib/_aix_support.py
+++ b/Lib/_aix_support.py
@@ -1,10 +1,28 @@
 """Shared AIX support functions."""
 
-import subprocess
 import sys
 import sysconfig
 
 
+# Taken from _osx_support _read_output function
+def _read_cmd_output(commandstring, capture_stderr=False):
+    """Output from successful command execution or None"""
+    # Similar to os.popen(commandstring, "r").read(),
+    # but without actually using os.popen because that
+    # function is not usable during python bootstrap.
+    import os
+    import contextlib
+    fp = open("/tmp/_aix_support.%s"%(
+        os.getpid(),), "w+b")
+
+    with contextlib.closing(fp) as fp:
+        if capture_stderr:
+            cmd = "%s >'%s' 2>&1" % (commandstring, fp.name)
+        else:
+            cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name)
+        return fp.read() if not os.system(cmd) else None
+
+
 def _aix_tag(vrtl, bd):
     # type: (List[int], int) -> str
     # Infer the ABI bitwidth from maxsize (assuming 64 bit as the default)
@@ -30,7 +48,12 @@ def _aix_bos_rte():
     If no builddate is found give a value that will satisfy pep425 related queries
     """
     # All AIX systems to have lslpp installed in this location
-    out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"])
+    # subprocess may not be available during python bootstrap
+    try:
+        import subprocess
+        out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"])
+    except ImportError:
+        out = _read_cmd_output("/usr/bin/lslpp -Lqc bos.rte")
     out = out.decode("utf-8")
     out = out.strip().split(":")  # type: ignore
     _bd = int(out[-1]) if out[-1] != '' else 9988
diff --git a/Misc/NEWS.d/next/Build/2022-08-30-10-16-31.gh-issue-96305.274i8B.rst b/Misc/NEWS.d/next/Build/2022-08-30-10-16-31.gh-issue-96305.274i8B.rst
new file mode 100644
index 000000000000..64a48da658f2
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2022-08-30-10-16-31.gh-issue-96305.274i8B.rst
@@ -0,0 +1,2 @@
+``_aix_support`` now uses a simple code to get platform details rather than
+the now non-existent ``_bootsubprocess`` during bootstrap.



More information about the Python-checkins mailing list