Это будет непросто, по крайней мере, в пределах argparse
.
Когда вы add_argument
создаете объект класса Action
и присваиваете атрибуты:
a1 = parser.add_argument('--version', metavar='X.Y.Z')
a2 = parser.add_argument('--date')
a1.metavar
будет 'X.Y.Z'
, a2.metavar
будет по умолчанию None
.
Это значение, которое используется в строке помощи, что-то вроде:
`'help %(metavar)`%{'metavar':action.metavar}'
Этот атрибут action.metavar
можно изменить после создания действия, как показано в другом ответе.
Но для usage
и первой части help
это выглядит примерно так:
def _metavar_formatter(self, action, default_metavar):
if action.metavar is not None:
result = action.metavar
elif action.choices is not None:
choice_strs = [str(choice) for choice in action.choices]
result = '{%s}' % ','.join(choice_strs)
else:
result = default_metavar
...
default_metavar
отличается для positionals
и optionals
, но в основном происходит от action.dest
. Таким образом, отображаемое metavar
генерируется на лету и нигде не сохраняется.
Обрабатывается %(metavar)s
:
def _expand_help(self, action):
params = dict(vars(action), prog=self._prog)
for name in list(params):
if params[name] is SUPPRESS:
del params[name]
for name in list(params):
if hasattr(params[name], '__name__'):
params[name] = params[name].__name__
if params.get('choices') is not None:
choices_str = ', '.join([str(c) for c in params['choices']])
params['choices'] = choices_str
return self._get_help_string(action) % params
vars(action)
составляет словарь из всех атрибутов action
.
Я могу представить создание подкласса Formatter, который модифицирует один или несколько методов. Существующие подклассы работают, изменяя только один или два низкоуровневых метода. Но для этого нужно изучить код.
In [329]: p = argparse.ArgumentParser()
In [330]: a1 = p.add_argument('--version', metavar='X.Y.Z')
In [331]: a1
Out[331]: _StoreAction(option_strings=['--version'], dest='version', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar='X.Y.Z')
In [332]: vars(a1)
Out[332]:
{'option_strings': ['--version'],
'dest': 'version',
'nargs': None,
'const': None,
'default': None,
'type': None,
'choices': None,
'required': False,
'help': None,
'metavar': 'X.Y.Z',
'container': <argparse._ArgumentGroup at 0x7f72ecc4b4a8>}
Справка с несколькими параметрами:
In [333]: a1.help='help %(metavar)s, %(dest)s, %(required)s'
In [334]: p.print_help()
usage: ipython3 [-h] [--version X.Y.Z]
optional arguments:
-h, --help show this help message and exit
--version X.Y.Z help X.Y.Z, version, False