Python 具有相同类型的多个参数

Python 具有相同类型的多个参数,python,argparse,Python,Argparse,我正在使用argparse生成CLI。有两个位置参数,它们都是str类型,可以多次出现(即,nargs='+') 我当前的代码是: parser.add_argument('-a', type=str, nargs='+', required=True, help='argument a') parser.add_argument('-b', type=str, nargs='+', required=True,

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

我当前的代码是:

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

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

在argparse中是否有这样做的方法? 例如:


帮助
初始定义如下:

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
相同

是的,这两个参数在
可选参数组中。唯一的默认选项是
位置参数
。没有“必需”组或“必需但已标记”组

但是像这样替换输入

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

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

但是如果只是组名让你烦恼,我们可以用一个参数来改变它

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
如果参数没有标记为
必需
,则用法会有额外的[]:

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

指定
所需的
(和“?”nargs)的可能性模糊了
选项
位置
之间的传统区别。我们可以有所需的选项和可选的位置

“我想使a和b都处于位置。”-作为接口,这没有意义。如果我执行
your_program.py a b c d e
,哪些参数应该是
a
参数,哪些参数应该是
b
参数?@user2357112这就是我问的原因。。是否有明确的方法来区分它们?只需使用“+”创建一个位置参数,并在解析后拆分列表。你是唯一能分辨出哪些属于
a
哪些属于
b
的人。我们不能。如果用“+”定义两个位置,第二个将得到最后一个字符串,第一个将得到其余字符串。请查看
sys.argv
。这就是argparse所看到的。
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
usage: stack52580176.py [-h] [-a A [A ...]] [-b B [B ...]]