我试图将列表作为参数传递给命令行程序 . 是否有argparse选项将列表作为选项传递?
parser.add_argument('-l', '--list',
type=list, action='store',
dest='list',
help='<Required> Set flag',
required=True)
脚本调用如下
python test.py -l "265340 268738 270774 270817"
7 回答
也许是最简单的答案
TL;DR
使用
nargs
选项或action
选项的'append'
设置(取决于您希望用户界面的行为方式) .nargs
nargs='+'
需要1个或多个参数,nargs='*'
需要零或更多 .append
使用
append
,您可以多次提供选项以构建列表 .Don't use type=list!!! - 您可能不希望将
type=list
与argparse
一起使用 . 永远 .让我们以一些可能尝试这样做的不同方式以及最终结果来详细了解 .
这是您可以期望的输出:
小贴士:
使用
nargs
或action='append'
从用户的角度来看,
nargs
可以更直接,但如果存在位置参数,它可能是不直观的,因为argparse
不能告诉什么应该是位置参数,什么属于nargs
;如果你有位置参数,那么action='append'
可能最终成为一个更好的选择 .以上仅在
nargs
被赋予'*'
,'+'
或'?'
时才为真 . 如果您提供整数(例如4
),那么将选项与nargs
和位置参数混合没有问题,因为argparse
将准确知道该选项需要多少个值 .不要在命令行1上使用引号
不要使用
type=list
,因为它会返回列表列表发生这种情况是因为在引擎盖下
argparse
使用type
的值来强制给出您所选择的type
给定参数,而不是所有参数的聚合 .您可以使用
type=int
(或其他)获取整数列表(或其他)1:我不是一般意思..我的意思是使用引号将列表传递给
argparse
不是你想要的 .我更喜欢传递一个分隔的字符串,我稍后会在脚本中解析它 . 原因是:列表可以是任何类型
int
或str
,有时使用nargs
如果有多个可选参数和位置参数,我会遇到问题 .然后,
要么,
会很好的 . 分隔符也可以是一个空格,虽然可以在参数值周围强制引用,如问题中的示例所示 .
除了nargs之外,如果您事先知道列表,则可能需要使用choices:
如果您打算使用多个参数进行单个切换,则使用
nargs='+'
. 如果您的示例'-l'实际上采用整数:产生
如果多次指定相同的参数,则默认操作(
'store'
)将替换现有数据 .另一种方法是使用
append
动作:哪个产生
或者,您可以编写自定义处理程序/操作来解析以逗号分隔的值,以便您可以执行此操作
在
add_argument()
中,type
只是一个可调用的对象,它接收字符串并返回选项值 .这将允许:
在argparse的add_argument方法中使用 nargs parameter
如果我没有传递任何显式参数,我会使用nargs ='' as an add_argument parameter. I specifically used nargs=''来选择默认值
包含代码段作为示例:
Example: temp_args1.py
请注意:下面的示例代码是用python3编写的 . 通过更改print语句格式,可以在python2中运行
注意:我正在收集存储在列表中的多个字符串参数 - opts.alist如果需要整数列表,请将parser.add_argument上的type参数更改为int
Execution Result: