我有一个接受可变数量的字符串参数argparse
example
:
parser.add_argument('--example', nargs='*', required=False, default='')
script.py --example ab cd
:使用CLI时照常使用命令行输入这工作得很好。
我也想这与传递给从程序代码中parser.parse_args(args)
through the args
argument论证工作。
但是,当我试图通过parser.parse_args(["--example", "ab cd"])
,它解释为一个字符串"ab cd"
而不是ab
和cd
的列表。
同样,通过parser.parse_args(["--example", "ab", "cd"])
以某种方式解释为一个参数,它是一个列表。因此,访问args.example[0]
当我拿到名单和args.example[1]
让我的错误。
当你的链接显示,你可以给parse_args
字符串列表。
In [210]: parser = argparse.ArgumentParser()
In [211]: parser.add_argument('-i','--image_types', nargs='*', default='');
为了测试解析没有任何命令行参数,通过给它一个空列表:
In [212]: parser.parse_args([])
Out[212]: Namespace(image_types='')
随着字符串列表:
In [213]: parser.parse_args(['-i','a','b'])
Out[213]: Namespace(image_types=['a', 'b'])
或分割的字符串:
In [214]: parser.parse_args('-i a b'.split())
Out[214]: Namespace(image_types=['a', 'b'])
答案argparse
问题经常使用这些形式之一,说明他们的行动。该split
方便。
也可以直接创建args
命名空间:
In [215]: argparse.Namespace(image_types=['a','b','c'])
Out[215]: Namespace(image_types=['a', 'b', 'c'])
我不明白你的结果的解释
parser.parse_args(["--example", "ab", "cd"])
这应该产生一个args.example
是["ab", "cd"]
。
这不是一个很好的测试案例:
parser.parse_args(["--example", "ab cd"])
从命令行产生同样的事情,你必须使用
python --example "ab cd"
引号覆盖在白色的空间正常分裂。你必须使用shlex.split
模仿这种行为。
这是棘手argparse处理列表直接使用CSV列表,而不是:
parser.add_argument('--image_types', \
help='csv list of imagetypes', \
default='iff,gif,jpeg,png', default=None)
if args.image_types:
args.image_types = args.image_types.split(',')