我正在使用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')
答案 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)的可能性模糊了optionals
和positionals
之间的常规区别。我们可以有必需的可选和可选的positional。