From 313523ce2dd67db67b7dcbcc5f6d6ca95922b34b Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 17 Sep 2016 12:22:41 -0700 Subject: [PATCH] Issue #28192: Don't import readline in isolated mode --- Lib/site.py | 12 +++++++----- Lib/test/test_site.py | 8 ++------ Modules/main.c | 3 ++- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Lib/site.py b/Lib/site.py index 52502667553..b6376357ea3 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -60,7 +60,8 @@ The readline module is also automatically configured to enable completion for systems that support it. This can be overridden in -sitecustomize, usercustomize or PYTHONSTARTUP. +sitecustomize, usercustomize or PYTHONSTARTUP. Starting Python in +isolated mode (-I) disables automatic readline configuration. After these operations, an attempt is made to import a module named sitecustomize, which can perform arbitrary additional @@ -491,7 +492,7 @@ def execsitecustomize(): else: raise except Exception as err: - if os.environ.get("PYTHONVERBOSE"): + if sys.flags.verbose: sys.excepthook(*sys.exc_info()) else: sys.stderr.write( @@ -511,7 +512,7 @@ def execusercustomize(): else: raise except Exception as err: - if os.environ.get("PYTHONVERBOSE"): + if sys.flags.verbose: sys.excepthook(*sys.exc_info()) else: sys.stderr.write( @@ -538,12 +539,13 @@ def main(): setquit() setcopyright() sethelper() - enablerlcompleter() + if not sys.flags.isolated: + enablerlcompleter() execsitecustomize() if ENABLE_USER_SITE: execusercustomize() -# Prevent edition of sys.path when python was started with -S and +# Prevent extending of sys.path when python was started with -S and # site is imported later. if not sys.flags.no_site: main() diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 9afa56eb735..b0486482267 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -140,8 +140,6 @@ def test_addpackage_import_bad_exec(self): self.assertRegex(err_out.getvalue(), 'Traceback') self.assertRegex(err_out.getvalue(), 'ModuleNotFoundError') - @unittest.skipIf(sys.platform == "win32", "Windows does not raise an " - "error for file paths containing null characters") def test_addpackage_import_bad_pth_file(self): # Issue 5258 pth_dir, pth_fn = self.make_pth("abc\x00def\n") @@ -447,10 +445,9 @@ def test_startup_imports(self): popen = subprocess.Popen([sys.executable, '-I', '-v', '-c', 'import sys; print(set(sys.modules))'], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + stderr=subprocess.PIPE, + encoding='utf-8') stdout, stderr = popen.communicate() - stdout = stdout.decode('utf-8') - stderr = stderr.decode('utf-8') modules = eval(stdout) self.assertIn('site', modules) @@ -474,6 +471,5 @@ def test_startup_imports(self): if sys.platform != 'darwin': self.assertFalse(modules.intersection(collection_mods), stderr) - if __name__ == "__main__": unittest.main() diff --git a/Modules/main.c b/Modules/main.c index 0b82f480a6a..6986d94b42d 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -703,7 +703,8 @@ Py_Main(int argc, wchar_t **argv) PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind); if ((Py_InspectFlag || (command == NULL && filename == NULL && module == NULL)) && - isatty(fileno(stdin))) { + isatty(fileno(stdin)) && + !Py_IsolatedFlag) { PyObject *v; v = PyImport_ImportModule("readline"); if (v == NULL)