我的代码如下:
list_of_choices = ["foo", "bar", "baz"]
parser = argparse.ArgumentParser(description='some description')
parser.add_argument("-n","--name","-o","--othername",dest=name,
choices=list_of_choices
我得到的输出结果如下:
-n {foo,bar,baz}, --name {foo,bar,baz}, -o {foo,bar,baz},
--othername {foo,bar,baz}
我想要的是:
-n, --name, -o, --othername {foo,bar,baz}
对于上下文,有历史原因,为什么我们需要两个名称用于相同的选项,实际的选择列表是22个元素长,所以它看起来比上面更糟。
这个问题与Python argparse: Lots of choices results in ugly help output略有不同,因为我没有使用两个单独的选项,并且可以将所有选项全部放在上面。
答案 0 :(得分:11)
我认为您可能需要多个add_arguments(),并且只将选项放在您想要选择的选项上。
list_of_choices = ["foo", "bar", "baz"]
parser = argparse.ArgumentParser(description='some description')
parser.add_argument("-n")
parser.add_argument("--name")
parser.add_argument("-o")
parser.add_argument("--othername",dest='name',
choices=list_of_choices)
答案 1 :(得分:4)
谢谢,@ thomas-schultz。我不知道add_argument的顺序方面,你的评论让我走上正轨,并结合其他线程的评论。
基本上,我现在所做的是将所有四个放在互斥组中,抑制前三个的输出,然后将它们包含在组的描述中。
输出如下:
group1
use one of -n, --name, -o, --othername
-n {foo,bar,baz}
比原版更干净。
答案 2 :(得分:0)
这是我在经过一些调整后确定的代码,对于评论来说太大了:(
parser = argparse.ArgumentParser(description='some description',
epilog="At least one of -n, -o, --name, or --othername is required and they all do the same thing.")
parser.add_argument('-d', '--dummy', dest='dummy',
default=None, help='some other flag')
stuff=parser.add_mutually_exclusive_group(required=True)
stuff.add_argument('-n', dest='name',
action='store', choices=all_grids, help=argparse.SUPPRESS)
stuff.add_argument('-o', dest='name',
action='store', choices=all_grids, help=argparse.SUPPRESS)
stuff.add_argument('--name', dest='name',
action='store', choices=all_grids, help=argparse.SUPPRESS)
stuff.add_argument('--othername', dest='name',
action='store', choices=all_grids, help='')
args = parser.parse_args()
输出如下:
(用法,然后是选项列表:)
- othername {foo,bar,baz}
至少需要-n,-o, - name或--othername中的一个,它们都做同样的事情。