diff options
author | Christian Heimes <christian@python.org> | 2022-07-24 06:04:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-24 06:04:06 (GMT) |
commit | 8184f0fce3b734413e3d3a282f1425d3cb8507fd (patch) | |
tree | 1515ad7ab744e7520a47590fed89cadfbe0de02e | |
parent | 5c7f3bcdafedd60a385e8ca5403bc6b0b7a862b3 (diff) | |
download | cpython-8184f0fce3b734413e3d3a282f1425d3cb8507fd.zip cpython-8184f0fce3b734413e3d3a282f1425d3cb8507fd.tar.gz cpython-8184f0fce3b734413e3d3a282f1425d3cb8507fd.tar.bz2 |
gh-95174: Handle missing waitpid and gethostbyname in WASI (GH-95181)
-rw-r--r-- | Lib/subprocess.py | 23 | ||||
-rw-r--r-- | Lib/uuid.py | 2 |
2 files changed, 19 insertions, 6 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index e10b010..7ae8df1 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -102,8 +102,19 @@ if _mswindows: else: if _can_fork_exec: from _posixsubprocess import fork_exec as _fork_exec + # used in methods that are called by __del__ + _waitpid = os.waitpid + _waitstatus_to_exitcode = os.waitstatus_to_exitcode + _WIFSTOPPED = os.WIFSTOPPED + _WSTOPSIG = os.WSTOPSIG + _WNOHANG = os.WNOHANG else: _fork_exec = None + _waitpid = None + _waitstatus_to_exitcode = None + _WIFSTOPPED = None + _WSTOPSIG = None + _WNOHANG = None import select import selectors @@ -1890,19 +1901,19 @@ class Popen: def _handle_exitstatus(self, sts, - waitstatus_to_exitcode=os.waitstatus_to_exitcode, - _WIFSTOPPED=os.WIFSTOPPED, - _WSTOPSIG=os.WSTOPSIG): + _waitstatus_to_exitcode=_waitstatus_to_exitcode, + _WIFSTOPPED=_WIFSTOPPED, + _WSTOPSIG=_WSTOPSIG): """All callers to this function MUST hold self._waitpid_lock.""" # This method is called (indirectly) by __del__, so it cannot # refer to anything outside of its local scope. if _WIFSTOPPED(sts): self.returncode = -_WSTOPSIG(sts) else: - self.returncode = waitstatus_to_exitcode(sts) + self.returncode = _waitstatus_to_exitcode(sts) - def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, - _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): + def _internal_poll(self, _deadstate=None, _waitpid=_waitpid, + _WNOHANG=_WNOHANG, _ECHILD=errno.ECHILD): """Check if child process has terminated. Returns returncode attribute. diff --git a/Lib/uuid.py b/Lib/uuid.py index f179d68..8fe2479 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -524,6 +524,8 @@ def _ip_getnode(): def _arp_getnode(): """Get the hardware address on Unix by running arp.""" import os, socket + if not hasattr(socket, "gethostbyname"): + return None try: ip_addr = socket.gethostbyname(socket.gethostname()) except OSError: |