]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix script_helper.run_python_until_end(): copy SYSTEMROOT
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 12 Jan 2017 10:51:46 +0000 (11:51 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 12 Jan 2017 10:51:46 +0000 (11:51 +0100)
Windows requires at least the SYSTEMROOT environment variable to start Python.
If run_python_until_end() doesn't copy SYSTEMROOT, the function always fail on
Windows.

Lib/test/support/script_helper.py

index 80889b17f3f376d875cc57d1a41d4f0c1653843a..ca5f9c20dd039f6964f07747db9b3674fc7cb6b2 100644 (file)
@@ -70,17 +70,28 @@ def run_python_until_end(*args, **env_vars):
     elif not env_vars and not env_required:
         # ignore Python environment variables
         cmd_line.append('-E')
-    # Need to preserve the original environment, for in-place testing of
-    # shared library builds.
-    env = os.environ.copy()
-    # set TERM='' unless the TERM environment variable is passed explicitly
-    # see issues #11390 and #18300
-    if 'TERM' not in env_vars:
-        env['TERM'] = ''
+
     # But a special flag that can be set to override -- in this case, the
     # caller is responsible to pass the full environment.
     if env_vars.pop('__cleanenv', None):
         env = {}
+        if sys.platform == 'win32':
+            # Windows requires at least the SYSTEMROOT environment variable to
+            # start Python.
+            env['SYSTEMROOT'] = os.environ['SYSTEMROOT']
+
+        # Other interesting environment variables, not copied currently:
+        # COMSPEC, HOME, PATH, TEMP, TMPDIR, TMP.
+    else:
+        # Need to preserve the original environment, for in-place testing of
+        # shared library builds.
+        env = os.environ.copy()
+
+    # set TERM='' unless the TERM environment variable is passed explicitly
+    # see issues #11390 and #18300
+    if 'TERM' not in env_vars:
+        env['TERM'] = ''
+
     env.update(env_vars)
     cmd_line.extend(args)
     proc = subprocess.Popen(cmd_line, stdin=subprocess.PIPE,