相同类型的多个参数

时间:2018-09-30 17:04:58

标签: python argparse

我正在使用argparse生成CLI。有两个位置参数均为str类型,可以出现多次(即nargs ='+')。

我当前的代码如下:

preventDefault

但是,这不是一个好的解决方案,因为a和b都是帮助文档中的“可选参数”。我想使a和b都处于位置。

在argparse中有什么方法可以这样做吗? 如:

    parser.add_argument('-a', type=str, nargs='+', required=True,
                        help='argument a')
    parser.add_argument('-b', type=str, nargs='+', required=True,
                        help='argument b')

1 个答案:

答案 0 :(得分:1)

help的初始定义是:

usage: stack52580176.py [-h] -a A [A ...] -b B [B ...]

optional arguments:
  -h, --help    show this help message and exit
  -a A [A ...]  argument a
  -b B [B ...]  argument b

用法行显示-a至少需要一个参数。对于-b也是一样。

是的,这两个参数在optional arguments组中。唯一的默认替代方案是positional arguments。没有“必需”组或“必需但已标记”组。

但是替换输入

python main.py -a a_1 a_2 -b b_1 b_2

具有:

python main.py a=["a_1", "a_2"] b=["b_1", "b_2"]

对于您的用户和您自己都是尴尬的。它需要一些额外的引号来防止外壳在所有空格上分裂。而且您必须自己解析字符串'a = [“ a_1”,“ a_2”]'。

但是,如果只是让您困扰的组名,我们可以使用argument_group来更改它

import argparse
parser = argparse.ArgumentParser()
g = parser.add_argument_group('required arguments:')
g.add_argument('-a', type=str, nargs='+', required=True,
                        help='argument a')
g.add_argument('-b', type=str, nargs='+', required=True,
                        help='argument b')
parser.print_help()

产生:

usage: stack52580176.py [-h] -a A [A ...] -b B [B ...]

optional arguments:
  -h, --help    show this help message and exit

required arguments::
  -a A [A ...]  argument a
  -b B [B ...]  argument b

如果未将参数标记为required,则用法将有额外的[]:

usage: stack52580176.py [-h] [-a A [A ...]] [-b B [B ...]]

指定required(和'?'nargs)的可能性模糊了optionalspositionals之间的常规区别。我们可以有必需的可选和可选的positional。

相关问题