@@ -699,7 +699,7 @@ index f3828b10e1..7e86539bfa 100644
699
699
+ _CASE_INSENSITIVE_PLATFORMS_STR_KEY)
700
700
701
701
diff --git a/Lib/os.py b/Lib/os.py
702
- index b794159f86..449cf932b6 100644
702
+ index b794159f86..78aab1ea2a 100644
703
703
--- a/Lib/os.py
704
704
+++ b/Lib/os.py
705
705
@@ -36,7 +36,7 @@
@@ -716,7 +716,7 @@ index b794159f86..449cf932b6 100644
716
716
del _fscodec
717
717
718
718
+
719
- + if sys.platform in ('iOS ', 'tvos', 'watchos'):
719
+ + if sys.platform in ('ios ', 'tvos', 'watchos'):
720
720
+ allows_subprocesses = False
721
721
+ else:
722
722
+ allows_subprocesses = True
@@ -834,74 +834,20 @@ index 9e617afb00..41305298d3 100644
834
834
return f'{userbase}/lib/python{version[0]}.{version[1]}/site-packages'
835
835
836
836
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
837
- index 4effc1d8b3..70e69c2379 100644
837
+ index 4effc1d8b3..b0e4a5acac 100644
838
838
--- a/Lib/subprocess.py
839
839
+++ b/Lib/subprocess.py
840
- @@ -75,9 +75,13 @@
841
- _mswindows = True
842
- except ModuleNotFoundError:
843
- _mswindows = False
844
- - import _posixsubprocess
845
- - import select
846
- - import selectors
847
- + try:
848
- + import _posixsubprocess
849
- + import select
850
- + import selectors
851
- + except ModuleNotFoundError:
852
- + # iOS *has* subprocesses, but doesn't support them.
853
- + _posixsubprocess = None
854
- else:
855
- from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
856
- STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
857
- @@ -212,7 +216,7 @@
858
- return "%s(%d)" % (self.__class__.__name__, int(self))
859
-
860
- __del__ = Close
861
- - else:
862
- + elif _posixsubprocess:
863
- # When select or poll has indicated that the file is writable,
864
- # we can write up to _PIPE_BUF bytes without risk of blocking.
865
- # POSIX defines PIPE_BUF as >= 512.
866
- @@ -240,7 +244,7 @@
867
-
868
- def _cleanup():
869
- pass
870
- - else:
871
- + elif _posixsubprocess:
872
- # This lists holds Popen instances for which the underlying process had not
873
- # exited at the time its __del__ method got called: those processes are
874
- # wait()ed for synchronously from _cleanup() when a new Popen object is
875
- @@ -259,6 +263,9 @@
876
- # This can happen if two threads create a new Popen instance.
877
- # It's harmless that it was already removed, so ignore.
878
- pass
879
- + else:
880
- + def _cleanup():
881
- + pass
882
-
883
- PIPE = -1
884
- STDOUT = -2
885
- @@ -660,7 +667,7 @@
886
- Prefer an implementation which can use vfork() in some cases for best
887
- performance.
888
- """
889
- - if _mswindows or not hasattr(os, 'posix_spawn'):
890
- + if _mswindows or _posixsubprocess is None or not hasattr(os, 'posix_spawn'):
891
- # os.posix_spawn() is not available
892
- return False
893
-
894
- @@ -762,6 +769,9 @@
840
+ @@ -762,6 +762,9 @@
895
841
pass_fds=(), *, user=None, group=None, extra_groups=None,
896
842
encoding=None, errors=None, text=None, umask=-1):
897
843
"""Create new Popen instance."""
898
- + if not _mswindows and _posixsubprocess is None :
844
+ + if not os.allows_subprocesses :
899
845
+ raise RuntimeError(f"Subprocesses are not supported on {sys.platform}")
900
846
+
901
847
_cleanup()
902
848
# Held while anything is calling waitpid before returncode has been
903
849
# updated to prevent clobbering returncode if wait() or poll() are
904
- @@ -1834,7 +1844 ,7 @@
850
+ @@ -1834,7 +1837 ,7 @@
905
851
else:
906
852
self.returncode = waitstatus_to_exitcode(sts)
907
853
@@ -910,7 +856,7 @@ index 4effc1d8b3..70e69c2379 100644
910
856
_WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
911
857
"""Check if child process has terminated. Returns returncode
912
858
attribute.
913
- @@ -1843,6 +1853 ,8 @@
859
+ @@ -1843,6 +1846 ,8 @@
914
860
outside of the local scope (nor can any methods it calls).
915
861
916
862
"""
0 commit comments