分析器開始了與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()
運行結果:
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$
實現此的另一種方式是定義一個新的format_help
方法的ArgumentParser
子類。在該方法中,重新排序for action_group...
循環中使用的列表。