我正在尝试将列表作为参数传递给命令行程序。是否有 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"
原文由 carte blanche 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答
使用
nargs
选项或action
选项的'append'
设置(取决于您希望用户界面的行为方式)。纳尔格斯
nargs='+'
接受 1 个或多个参数,nargs='*'
接受零个或多个。附加
使用
append
您可以多次提供该选项来构建列表。不要使用
type=list
!!! - 可能没有您想将type=list
与argparse
18c53151f3862a07c726dbdc8d34f— 一起使用的情况。曾经。长答案
让我们更详细地了解一些可能尝试执行此操作的不同方式以及最终结果。
这是您可以期待的输出:
_要点_:
nargs
或action='append'
nargs
从用户的角度来看可能更直接,但如果有位置参数可能不直观,因为argparse
无法分辨什么应该是位置参数以及什么属于nargs
;如果您有位置参数,那么action='append'
可能最终成为更好的选择。'*'
nargs
'+'
或'?'
如果您提供一个整数(例如4
),那么将选项与nargs
和位置参数混合使用不会有问题,因为argparse
将确切知道有多少值期望选项。type=list
,因为它会返回一个列表列表argparse
使用type
的值来强制 每个给定的参数 你选择的type
,而不是所有参数的总和。type=int
(或其他)来获取整数列表(或其他)1 :我不是说一般……我的意思是使用引号 将列表传递给
argparse
不是你想要的。