Python 具有相同类型的多个参数
我正在使用argparse生成CLI。有两个位置参数,它们都是str类型,可以多次出现(即,nargs='+') 我当前的代码是: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,
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 ...]]