argparse帮助消息中的互斥组标题和描述

时间:2017-08-10 00:14:38

标签: python argparse

为什么我不能与argparsetitle建立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不带任何额外的位置参数)。有没有人有解决方法?

1 个答案:

答案 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

代码本身有更多详细信息,并且在一两个错误/问题中,但这应该可以帮助你。