我想引用围绕 " arg1" " arg2" 被视为不在同一列表中的单独参数 " arg1 arg2" 作为单独的参数但在同一列表中。
test.py取自here
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--nargs', nargs='*')
for _, value in parser.parse_args()._get_kwargs():
if value is not None:
print(value)
运行1
python test.py --nargs "arg arg2"
输出1
['arg arg2']
我猜这很好吗?但是arg和arg2被认为是单独的论点吗?
运行2
python test.py --nargs "arg" "arg2"
输出2
['arg', 'arg2']
在同一个列表中,它们被认为是单独的参数吗?我需要他们像:
['arg'] ['arg2']
答案 0 :(得分:1)
python test.py --nargs "arg arg2"
提供解析器(通过sys.argv[1:]
)['--nargs', 'arg arg2']
。解析器将该参数字符串'arg arg2'
放入args
命名空间。因为nargs='*'
它被放在一个列表中。
所以args = parser.parse_args()
应该产生
Namespace(nargs = ['arg arg2'])
python test.py --nargs "arg" "arg2"
的不同之处仅在于shell拆分了2个字符串['--nargs', 'arg'. 'arg2']
,并且解析器将两个字符串放入该列表中。
通常有助于打印sys.argv
以查看解析器必须使用的内容。
要获得['arg'] ['arg2']
,我认为您必须使用
parser.add_argument('--nargs', nargs='*', action='append')
和
python test.py --nargs "arg" --nargs "arg2"
每次--nargs
次出现都会创建一个列表(因为*
),并将其附加到Namespace属性。实际上它会产生一个列表列表:
[['arg'], ['arg2']]