diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index e10b01047ebef5f4357182c911c6be4aa67e7f30..7ae8df154b481f995444f1f88132181115592d18 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -102,8 +102,19 @@
 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 @@ def _execute_child(self, args, executable, preexec_fn, close_fds,
 
 
         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 f179d68e8265ac6113ce1cf5ac3798d54c7d276b..8fe2479f3f22cfec686e5c01d9d9b104f7ef90ff 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: