prefix_chars='-', fromfile_prefix_chars=None, \
argument_default=None, conflict_handler='error', \
add_help=True, allow_abbrev=True, exit_on_error=True, \
- *, suggest_on_error=False, color=False)
+ *, suggest_on_error=False, color=True)
Create a new :class:`ArgumentParser` object. All parameters should be passed
as keyword arguments. Each parameter has its own more detailed description
* suggest_on_error_ - Enables suggestions for mistyped argument choices
and subparser names (default: ``False``)
- * color_ - Allow color output (default: ``False``)
+ * color_ - Allow color output (default: ``True``)
.. versionchanged:: 3.5
*allow_abbrev* parameter was added.
color
^^^^^
-By default, the help message is printed in plain text. If you want to allow
-color in help messages, you can enable it by setting ``color`` to ``True``::
+By default, the help message is printed in color using `ANSI escape sequences
+<https://en.wikipedia.org/wiki/ANSI_escape_code>`__.
+If you want plain text help messages, you can disable this :ref:`in your local
+environment <using-on-controlling-color>`, or in the argument parser itself
+by setting ``color`` to ``False``::
>>> parser = argparse.ArgumentParser(description='Process some integers.',
- ... color=True)
+ ... color=False)
>>> parser.add_argument('--action', choices=['sum', 'max'])
>>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
... help='an integer for the accumulator')
>>> parser.parse_args(['--help'])
-Even if a CLI author has enabled color, it can be
-:ref:`controlled using environment variables <using-on-controlling-color>`.
-
-If you're writing code that needs to be compatible with older Python versions
-and want to opportunistically use ``color`` when it's available, you
-can set it as an attribute after initializing the parser instead of using the
-keyword argument::
-
- >>> parser = argparse.ArgumentParser(description='Process some integers.')
- >>> parser.color = True
-
.. versionadded:: 3.14
import warnings
from enum import StrEnum
-from test.support import captured_stderr
+from test.support import (
+ captured_stderr,
+ force_not_colorized,
+ force_not_colorized_test_class,
+)
from test.support import import_helper
from test.support import os_helper
from test.support import script_helper
args = parser.parse_args(['--color', 'red'])
self.assertEqual(args.color, self.Color.RED)
+ @force_not_colorized
def test_help_message_contains_enum_choices(self):
parser = argparse.ArgumentParser()
parser.add_argument('--color', choices=self.Color, help='Choose a color')
# Subparsers tests
# ================
+@force_not_colorized_test_class
class TestAddSubparsers(TestCase):
"""Test the add_subparsers method"""
# Parent parser tests
# ===================
+@force_not_colorized_test_class
class TestParentParsers(TestCase):
"""Tests that parsers can be created with parent parsers"""
# Mutually exclusive group tests
# ==============================
+@force_not_colorized_test_class
class TestMutuallyExclusiveGroupErrors(TestCase):
def test_invalid_add_argument_group(self):
actual_ns = parse_args(args_string.split())
self.assertEqual(actual_ns, expected_ns)
+ @force_not_colorized
def test_usage_when_not_required(self):
format_usage = self.get_parser(required=False).format_usage
expected_usage = self.usage_when_not_required
self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
+ @force_not_colorized
def test_usage_when_required(self):
format_usage = self.get_parser(required=True).format_usage
expected_usage = self.usage_when_required
self.assertEqual(format_usage(), textwrap.dedent(expected_usage))
+ @force_not_colorized
def test_help_when_not_required(self):
format_help = self.get_parser(required=False).format_help
help = self.usage_when_not_required + self.help
self.assertEqual(format_help(), textwrap.dedent(help))
+ @force_not_colorized
def test_help_when_required(self):
format_help = self.get_parser(required=True).format_help
help = self.usage_when_required + self.help
tester.maxDiff = None
tester.assertEqual(expected_text, parser_text)
+ @force_not_colorized
def test_format(self, tester):
parser = self._get_parser(tester)
format = getattr(parser, 'format_%s' % self.func_suffix)
self._test(tester, format())
+ @force_not_colorized
def test_print(self, tester):
parser = self._get_parser(tester)
print_ = getattr(parser, 'print_%s' % self.func_suffix)
setattr(sys, self.std_name, old_stream)
self._test(tester, parser_text)
+ @force_not_colorized
def test_print_file(self, tester):
parser = self._get_parser(tester)
print_ = getattr(parser, 'print_%s' % self.func_suffix)
version = ''
+@force_not_colorized_test_class
class TestHelpUsageNoWhitespaceCrash(TestCase):
def test_all_suppressed_mutex_followed_by_long_arg(self):
version = ''
+@force_not_colorized_test_class
class TestHelpCustomHelpFormatter(TestCase):
maxDiff = None
self.assertRaises(argparse.ArgumentError,
parser.add_argument, '--spam')
+ @force_not_colorized
def test_resolve_error(self):
get_parser = argparse.ArgumentParser
parser = get_parser(prog='PROG', conflict_handler='resolve')
class TestArgumentTypeError(TestCase):
+ @force_not_colorized
def test_argument_type_error(self):
def spam(string):
metavar = '<http[s]://example:1234>'
self.parser.add_argument('--proxy', metavar=metavar)
+ @force_not_colorized
def test_help_with_metavar(self):
help_text = self.parser.format_help()
self.assertEqual(help_text, textwrap.dedent('''\
self.parser.parse_args, ['@no-such-file'])
+@force_not_colorized_test_class
class TestProgName(TestCase):
source = textwrap.dedent('''\
import argparse