为什么我不能与argparse
或title
建立description
互斥组,以便它在--help
消息下显示为单独的类别?
我有一个名称和描述的选项组:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_argument_group(
'foo options', 'various (mutually exclusive) ways to do foo')
group.add_argument('--option_a', action='store_true', help='option a')
group.add_argument('--option_b', action='store_true', help='option b')
args = parser.parse_args()
--help
的输出:
usage: foo.py [-h] [--option_a] [--option_b]
optional arguments:
-h, --help show this help message and exit
foo options:
various (mutually exclusive) ways to do foo
--option_a option a
--option_b option b
但我想让小组互相排斥:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group() # here
group.add_argument('--option_a', action='store_true', help='option a')
group.add_argument('--option_b', action='store_true', help='option b')
args = parser.parse_args()
--help
的输出:
usage: foo.py [-h] [--option_a | --option_b]
optional arguments:
-h, --help show this help message and exit
--option_a option a
--option_b option b
帮助消息中没有区别这些选项是组的一部分,我无法指定标题/描述(add_mutually_exclusive_group不带任何额外的位置参数)。有没有人有解决方法?
答案 0 :(得分:6)
为什么呢?因为这是它的编码方式!
互斥组是ArgumentGroups的子类,但界面不同。目的也很不一样。参数组控制帮助行的显示。它对解析没有任何作用。互斥组在解析期间检查参数,并在格式化使用行时使用。但它对帮助热线没有影响。
但是可以在参数组中嵌入一个互斥的组(但不是相反)。这应该产生你想要的东西。
In [2]: parser = argparse.ArgumentParser()
In [3]: group = parser.add_argument_group(
...: 'foo options', 'various (mutually exclusive) ways to do foo')
In [4]: mxg = group.add_mutually_exclusive_group()
In [5]: mxg.add_argument('--option_a', action='store_true', help='option a');
In [6]: mxg.add_argument('--option_b', action='store_true', help='option b');
In [7]: parser.print_help()
usage: ipython3 [-h] [--option_a | --option_b]
optional arguments:
-h, --help show this help message and exit
foo options:
various (mutually exclusive) ways to do foo
--option_a option a
--option_b option b
代码本身有更多详细信息,并且在一两个错误/问题中,但这应该可以帮助你。