我刚刚注意到argparse中的一个行为令我感到困惑(猜测之前我从未将它用于愚蠢的文件列表):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('multi', action='append', nargs='+')
print(parser.parse_args())
这给了我输出:
~$ ./testargs.py foo bar baz
Namespace(multi=[['foo', 'bar', 'baz']])
~$
我希望multi
为['foo', 'bar', 'baz']
,而不是列表中的列表。按原样,我必须在处理之前抓住args.multi[0]
,这不是什么大问题,但感觉就像一个丑陋的疣,我想知道它为什么会存在。
我在add_argument
做了些傻话,或者这只是一个不可避免的怪癖?
答案 0 :(得分:33)
您正在致电
parser.add_argument('multi', action='append', nargs='+')
它将获取所有参数并作为单个项目添加到多列表中。
如果您想将其作为单独的项目,请不要使用追加
parser.add_argument('multi', nargs='+')
来自文档
'append' - 存储一个列表,并将每个参数值附加到列表中。这对于允许多次指定选项很有用。用法示例:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])