diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-12-12 21:59:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-12 21:59:48 (GMT) |
commit | 747f48e2e92390c44c72f52a1239959601cde157 (patch) | |
tree | 502e53b129aee7a393ca6d05e4f93751919a5e1b /Lib/subprocess.py | |
parent | b748e3b2586e44bfc7011b601bce9cc6d16d89f1 (diff) | |
download | cpython-747f48e2e92390c44c72f52a1239959601cde157.zip cpython-747f48e2e92390c44c72f52a1239959601cde157.tar.gz cpython-747f48e2e92390c44c72f52a1239959601cde157.tar.bz2 |
bpo-32230: Set sys.warnoptions with -X dev (#4820)
Rather than supporting dev mode directly in the warnings module, this
instead adjusts the initialisation code to add an extra 'default'
entry to sys.warnoptions when dev mode is enabled.
This ensures that dev mode behaves *exactly* as if `-Wdefault` had
been passed on the command line, including in the way it interacts
with `sys.warnoptions`, and with other command line flags like `-bb`.
Fix also bpo-20361: have -b & -bb options take precedence over any
other warnings options.
Patch written by Nick Coghlan, with minor modifications of Victor Stinner.
Diffstat (limited to 'Lib/subprocess.py')
-rw-r--r-- | Lib/subprocess.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 35bfddd..301433c 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -241,7 +241,7 @@ def _optim_args_from_interpreter_flags(): def _args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current - settings in sys.flags and sys.warnoptions.""" + settings in sys.flags, sys.warnoptions and sys._xoptions.""" flag_opt_map = { 'debug': 'd', # 'inspect': 'i', @@ -262,12 +262,22 @@ def _args_from_interpreter_flags(): args.append('-' + opt * v) # -W options - for opt in sys.warnoptions: + warnopts = sys.warnoptions[:] + bytes_warning = sys.flags.bytes_warning + xoptions = getattr(sys, '_xoptions', {}) + dev_mode = ('dev' in xoptions) + + if bytes_warning > 1: + warnopts.remove("error::BytesWarning") + elif bytes_warning: + warnopts.remove("default::BytesWarning") + if dev_mode: + warnopts.remove('default') + for opt in warnopts: args.append('-W' + opt) # -X options - xoptions = getattr(sys, '_xoptions', {}) - if 'dev' in xoptions: + if dev_mode: args.extend(('-X', 'dev')) for opt in ('faulthandler', 'tracemalloc', 'importtime', 'showalloccount', 'showrefcount'): |