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

jay*_*elm 4 python argparse

为什么我不能拥有一个argparsetitleor 相互排斥的组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不采用其他位置参数).有没有人有解决方法?

hpa*_*ulj 8

为什么?因为这是它的编码方式!

互斥组是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)

代码本身有更多细节,在一两个错误/问题中,但这应该让你去.