为什么我不能拥有一个argparse与titleor 相互排斥的组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()
Run Code Online (Sandbox Code Playgroud)
产量--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
Run Code Online (Sandbox Code Playgroud)
但我想让小组互相排斥:
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()
Run Code Online (Sandbox Code Playgroud)
产量--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
Run Code Online (Sandbox Code Playgroud)
在帮助消息中没有区别这些选项是组的一部分,我不能指定标题/描述(add_mutually_exclusive_group不采用其他位置参数).有没有人有解决方法?
为什么?因为这是它的编码方式!
互斥组是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
Run Code Online (Sandbox Code Playgroud)
代码本身有更多细节,在一两个错误/问题中,但这应该让你去.