diff -r 69aa17b1f894 Lib/subprocess.py --- a/Lib/subprocess.py Wed Jan 13 07:48:57 2016 -0800 +++ b/Lib/subprocess.py Wed Jan 13 17:30:51 2016 +0100 @@ -520,6 +520,16 @@ DEVNULL = -3 # but it's here so that it can be imported when Python is compiled without # threads. +def _optim_args_from_interpreter_flags(): + """Return a list of command-line arguments reproducing the current + optimization settings in sys.flags.""" + args = [] + value = sys.flags.optimize + if value > 0: + args.append('-' + 'O' * value) + return args + + def _args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.""" @@ -527,7 +537,6 @@ def _args_from_interpreter_flags(): 'debug': 'd', # 'inspect': 'i', # 'interactive': 'i', - 'optimize': 'O', 'dont_write_bytecode': 'B', 'no_user_site': 's', 'no_site': 'S', @@ -535,6 +544,7 @@ def _args_from_interpreter_flags(): 'verbose': 'v', 'bytes_warning': 'b', 'quiet': 'q', + # -O is handled in _optim_args_from_interpreter_flags() } args = [] for flag, opt in flag_opt_map.items(): diff -r 69aa17b1f894 Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py Wed Jan 13 07:48:57 2016 -0800 +++ b/Lib/test/support/__init__.py Wed Jan 13 17:30:51 2016 +0100 @@ -2053,6 +2053,11 @@ def args_from_interpreter_flags(): settings in sys.flags and sys.warnoptions.""" return subprocess._args_from_interpreter_flags() +def optim_args_from_interpreter_flags(): + """Return a list of command-line arguments reproducing the current + optimization settings in sys.flags.""" + return subprocess._optim_args_from_interpreter_flags() + #============================================================ # Support for assertions about logging. #============================================================ diff -r 69aa17b1f894 Lib/test/test_compileall.py --- a/Lib/test/test_compileall.py Wed Jan 13 07:48:57 2016 -0800 +++ b/Lib/test/test_compileall.py Wed Jan 13 17:30:51 2016 +0100 @@ -219,9 +219,8 @@ class CommandLineTests(unittest.TestCase raise unittest.SkipTest('not all entries on sys.path are writable') def _get_run_args(self, args): - interp_args = ['-S'] - if sys.flags.optimize: - interp_args.append({1 : '-O', 2 : '-OO'}[sys.flags.optimize]) + interp_args = support.optim_args_from_interpreter_flags() + interp_args.append('-S') return interp_args + ['-m', 'compileall'] + list(args) def assertRunOK(self, *args, **env_vars): diff -r 69aa17b1f894 Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Wed Jan 13 07:48:57 2016 -0800 +++ b/Lib/test/test_inspect.py Wed Jan 13 17:30:51 2016 +0100 @@ -30,6 +30,7 @@ from test.support import MISSING_C_DOCST from test.support.script_helper import assert_python_ok, assert_python_failure from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 +from test import support from test.test_import import _ready_to_import @@ -3536,14 +3537,14 @@ class TestMain(unittest.TestCase): def test_details(self): module = importlib.import_module('unittest') - rc, out, err = assert_python_ok('-m', 'inspect', + args = support.optim_args_from_interpreter_flags() + rc, out, err = assert_python_ok(*args, '-m', 'inspect', 'unittest', '--details') output = out.decode() # Just a quick sanity check on the output self.assertIn(module.__name__, output) self.assertIn(module.__file__, output) - if not sys.flags.optimize: - self.assertIn(module.__cached__, output) + self.assertIn(module.__cached__, output) self.assertEqual(err, b'')