summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-06-29 22:49:03 (GMT)
committerGitHub <noreply@github.com>2020-06-29 22:49:03 (GMT)
commitdd8a93e23b5c4f9290e1cea6183d97eb9b5e61c0 (patch)
treee313d1898cff674146bfb1fef17f082f56628ed4 /Lib
parent2fb5f038f2a2e91a7293d62dfd5601e6eb500c55 (diff)
downloadcpython-dd8a93e23b5c4f9290e1cea6183d97eb9b5e61c0.zip
cpython-dd8a93e23b5c4f9290e1cea6183d97eb9b5e61c0.tar.gz
cpython-dd8a93e23b5c4f9290e1cea6183d97eb9b5e61c0.tar.bz2
bpo-23427: Add sys.orig_argv attribute (GH-20729)
Add sys.orig_argv attribute: the list of the original command line arguments passed to the Python executable. Rename also PyConfig._orig_argv to PyConfig.orig_argv and document it.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_embed.py40
-rw-r--r--Lib/test/test_sys.py20
2 files changed, 40 insertions, 20 deletions
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index fe47289..174892a 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -365,7 +365,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'program_name': GET_DEFAULT_CONFIG,
'parse_argv': 0,
'argv': [""],
- '_orig_argv': [],
+ 'orig_argv': [],
'xoptions': [],
'warnoptions': [],
@@ -739,11 +739,11 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'pycache_prefix': 'conf_pycache_prefix',
'program_name': './conf_program_name',
'argv': ['-c', 'arg2'],
- '_orig_argv': ['python3',
- '-W', 'cmdline_warnoption',
- '-X', 'cmdline_xoption',
- '-c', 'pass',
- 'arg2'],
+ 'orig_argv': ['python3',
+ '-W', 'cmdline_warnoption',
+ '-X', 'cmdline_xoption',
+ '-c', 'pass',
+ 'arg2'],
'parse_argv': 1,
'xoptions': [
'config_xoption1=3',
@@ -874,7 +874,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
}
config = {
'argv': ['script.py'],
- '_orig_argv': ['python3', '-X', 'dev', 'script.py'],
+ 'orig_argv': ['python3', '-X', 'dev', 'script.py'],
'run_filename': os.path.abspath('script.py'),
'dev_mode': 1,
'faulthandler': 1,
@@ -896,7 +896,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
"script.py"]
config = {
'argv': argv,
- '_orig_argv': argv,
+ 'orig_argv': argv,
'isolated': 0,
}
self.check_all_configs("test_preinit_dont_parse_argv", config, preconfig,
@@ -975,9 +975,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'ignore:::sysadd_warnoption',
'ignore:::config_warnoption',
],
- '_orig_argv': ['python3',
- '-W', 'ignore:::cmdline_warnoption',
- '-X', 'cmdline_xoption'],
+ 'orig_argv': ['python3',
+ '-W', 'ignore:::cmdline_warnoption',
+ '-X', 'cmdline_xoption'],
}
self.check_all_configs("test_init_sys_add", config, api=API_PYTHON)
@@ -986,7 +986,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'print(json.dumps(_testinternalcapi.get_configs()))')
config = {
'argv': ['-c', 'arg2'],
- '_orig_argv': ['python3', '-c', code, 'arg2'],
+ 'orig_argv': ['python3', '-c', code, 'arg2'],
'program_name': './python3',
'run_command': code + '\n',
'parse_argv': 1,
@@ -998,9 +998,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'print(json.dumps(_testinternalcapi.get_configs()))')
config = {
'argv': ['-c', 'arg2'],
- '_orig_argv': ['python3',
- '-c', code,
- 'arg2'],
+ 'orig_argv': ['python3',
+ '-c', code,
+ 'arg2'],
'program_name': './python3',
'run_command': code + '\n',
'parse_argv': 1,
@@ -1014,7 +1014,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
config = {
'parse_argv': 1,
'argv': ['-c', 'arg1', '-v', 'arg3'],
- '_orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
+ 'orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
'program_name': './argv0',
'run_command': 'pass\n',
'use_environment': 0,
@@ -1028,7 +1028,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
config = {
'parse_argv': 0,
'argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
- '_orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
+ 'orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
'program_name': './argv0',
}
self.check_all_configs("test_init_dont_parse_argv", config, pre_config,
@@ -1316,9 +1316,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'faulthandler': 1,
'bytes_warning': 1,
'warnoptions': warnoptions,
- '_orig_argv': ['python3',
- '-Wignore:::cmdline1',
- '-Wignore:::cmdline2'],
+ 'orig_argv': ['python3',
+ '-Wignore:::cmdline1',
+ '-Wignore:::cmdline2'],
}
self.check_all_configs("test_init_warnoptions", config, preconfig,
api=API_PYTHON)
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 194128e..aaba663 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -434,6 +434,11 @@ class SysModuleTest(unittest.TestCase):
def test_attributes(self):
self.assertIsInstance(sys.api_version, int)
self.assertIsInstance(sys.argv, list)
+ for arg in sys.argv:
+ self.assertIsInstance(arg, str)
+ self.assertIsInstance(sys.orig_argv, list)
+ for arg in sys.orig_argv:
+ self.assertIsInstance(arg, str)
self.assertIn(sys.byteorder, ("little", "big"))
self.assertIsInstance(sys.builtin_module_names, tuple)
self.assertIsInstance(sys.copyright, str)
@@ -930,6 +935,21 @@ class SysModuleTest(unittest.TestCase):
out = out.decode('ascii', 'replace').rstrip()
self.assertEqual(out, 'mbcs replace')
+ def test_orig_argv(self):
+ code = textwrap.dedent('''
+ import sys
+ print(sys.argv)
+ print(sys.orig_argv)
+ ''')
+ args = [sys.executable, '-I', '-X', 'utf8', '-c', code, 'arg']
+ proc = subprocess.run(args, check=True, capture_output=True, text=True)
+ expected = [
+ repr(['-c', 'arg']), # sys.argv
+ repr(args), # sys.orig_argv
+ ]
+ self.assertEqual(proc.stdout.rstrip().splitlines(), expected,
+ proc)
+
@test.support.cpython_only
class UnraisableHookTest(unittest.TestCase):