# See test_cmd_line_script.py for testing of script execution
import os
+import re
import subprocess
import sys
import tempfile
def test_help_env(self):
out = self.verify_valid_flag('--help-env')
self.assertIn(b'PYTHONHOME', out)
+ # Env vars in each section should be sorted alphabetically
+ # (ignoring underscores so PYTHON_FOO and PYTHONFOO intermix naturally)
+ sort_key = lambda name: name.replace(b'_', b'').lower()
+ sections = out.split(b'These variables have equivalent')
+ for section in sections:
+ envvars = re.findall(rb'^(PYTHON\w+)', section, re.MULTILINE)
+ self.assertEqual(envvars, sorted(envvars, key=sort_key),
+ "env vars should be sorted alphabetically")
@support.cpython_only
def test_help_xoptions(self):
out = self.verify_valid_flag('--help-xoptions')
self.assertIn(b'-X dev', out)
+ options = re.findall(rb'^-X (\w+)', out, re.MULTILINE)
+ self.assertEqual(options, sorted(options),
+ "options should be sorted alphabetically")
@support.cpython_only
def test_help_all(self):
/* Envvars that don't have equivalent command-line options are listed first */
static const char usage_envvars[] =
"Environment variables that change behavior:\n"
-"PYTHONSTARTUP : file executed on interactive startup (no default)\n"
-"PYTHONPATH : '%lc'-separated list of directories prefixed to the\n"
-" default module search path. The result is sys.path.\n"
-"PYTHONHOME : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n"
-" The default module search path uses %s.\n"
-"PYTHONPLATLIBDIR: override sys.platlibdir\n"
+"PYTHONBREAKPOINT: if this variable is set to 0, it disables the default\n"
+" debugger. It can be set to the callable of your debugger of\n"
+" choice.\n"
"PYTHONCASEOK : ignore case in 'import' statements (Windows)\n"
-"PYTHONIOENCODING: encoding[:errors] used for stdin/stdout/stderr\n"
-"PYTHONHASHSEED : if this variable is set to 'random', a random value is used\n"
-" to seed the hashes of str and bytes objects. It can also be\n"
-" set to an integer in the range [0,4294967295] to get hash\n"
-" values with a predictable seed.\n"
-"PYTHONMALLOC : set the Python memory allocators and/or install debug hooks\n"
-" on Python memory allocators. Use PYTHONMALLOC=debug to\n"
-" install debug hooks.\n"
"PYTHONCOERCECLOCALE: if this variable is set to 0, it disables the locale\n"
" coercion behavior. Use PYTHONCOERCECLOCALE=warn to request\n"
" display of locale coercion and locale compatibility warnings\n"
" on stderr.\n"
-"PYTHONBREAKPOINT: if this variable is set to 0, it disables the default\n"
-" debugger. It can be set to the callable of your debugger of\n"
-" choice.\n"
"PYTHON_COLORS : if this variable is set to 1, the interpreter will colorize\n"
" various kinds of output. Setting it to 0 deactivates\n"
" this behavior.\n"
+"PYTHONHASHSEED : if this variable is set to 'random', a random value is used\n"
+" to seed the hashes of str and bytes objects. It can also be\n"
+" set to an integer in the range [0,4294967295] to get hash\n"
+" values with a predictable seed.\n"
"PYTHON_HISTORY : the location of a .python_history file.\n"
+"PYTHONHOME : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n"
+" The default module search path uses %s.\n"
+"PYTHONIOENCODING: encoding[:errors] used for stdin/stdout/stderr\n"
+"PYTHONMALLOC : set the Python memory allocators and/or install debug hooks\n"
+" on Python memory allocators. Use PYTHONMALLOC=debug to\n"
+" install debug hooks.\n"
+"PYTHONPATH : '%lc'-separated list of directories prefixed to the\n"
+" default module search path. The result is sys.path.\n"
+"PYTHONPLATLIBDIR: override sys.platlibdir\n"
+"PYTHONSTARTUP : file executed on interactive startup (no default)\n"
"\n"
"These variables have equivalent command-line options (see --help for details):\n"
"PYTHON_CPU_COUNT: override the return value of os.cpu_count() (-X cpu_count)\n"
static void
config_envvars_usage(void)
{
- printf(usage_envvars, (wint_t)DELIM, (wint_t)DELIM, PYTHONHOMEHELP);
+ printf(usage_envvars, (wint_t)DELIM, PYTHONHOMEHELP, (wint_t)DELIM);
}
static void