Анализатор начинается с 2-х аргументов групп , обычный positional
и optionals
. Справка -h
добавлена к optionals
. Когда вы делаете add_argument_group
, группа создается (и возвращается вам). Он также прилагается к списку parser._action_groups
.
При обращении за помощью (-h
) вызывается parser.format_help()
(вы можете это сделать и при тестировании). Посмотрите на этот метод в argparse.py
. Это создает сообщение справки, и один шаг:
# positionals, optionals and user-defined groups
for action_group in self._action_groups:
formatter.start_section(action_group.title)
formatter.add_text(action_group.description)
formatter.add_arguments(action_group._group_actions)
formatter.end_section()
Так что, если мы изменить порядок элементов в списке parser._action_groups
, мы будем изменять порядок группы на дисплее. Поскольку это единственное использование _action_groups
, оно должно быть безопасным и легким. Но некоторым людям не разрешено пик под обложками (посмотрите или измените атрибуты ._
).
Предлагаемое решение (ы) состоит в том, чтобы создавать собственные группы в том порядке, в котором вы хотите их видеть, и убедитесь, что группы по умолчанию пустые (параметр add_help=False
). Это единственный способ сделать это, если вы придерживаетесь общедоступного API.
Демо:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo')
g1 = parser.add_argument_group('REQUIRED')
g1.add_argument('--bar', required=True)
g1.add_argument('baz', nargs=2)
print(parser._action_groups)
print([group.title for group in parser._action_groups])
print(parser.format_help())
parser._action_groups.reverse() # easy inplace change
parser.print_help()
результат Run:
1504:~/mypy$ python stack39047075.py
_actions_group
список и названия:
[<argparse._ArgumentGroup object at 0xb7247fac>,
<argparse._ArgumentGroup object at 0xb7247f6c>,
<argparse._ArgumentGroup object at 0xb721de0c>]
['positional arguments', 'optional arguments', 'REQUIRED']
по умолчанию помощь:
usage: stack39047075.py [-h] --bar BAR foo baz baz
positional arguments:
foo
optional arguments:
-h, --help show this help message and exit
REQUIRED:
--bar BAR
baz
после реверса:
usage: stack39047075.py [-h] --bar BAR foo baz baz
REQUIRED:
--bar BAR
baz
optional arguments:
-h, --help show this help message and exit
positional arguments:
foo
1504:~/mypy$
Другой способ реализовать это определить ArgumentParser
подкласс с новым методом format_help
. В этом методе выполняется переупорядочение списка, используемого в этом цикле for action_group...
.