Python argparse - 使用引号

时间:2017-08-10 14:53:30

标签: python argparse

我想引用围绕 " 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']

1 个答案:

答案 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']]