如何使用argparse.ArgumentParser在Python中从命令行传递并解析字符串列表?

68

我想从控制台向我的Python程序传递一个名字列表。例如,我想使用类似于这样的方式(我知道由于bash的缘故它不应该起作用):

$ python myprog.py -n name1 name2

所以,我尝试了这段代码:

# myprog.py

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('-n', '--names-list', default=[])
args = parser.parse_args()

print(args.names_list) # I need ['name1', 'name2'] here

这导致了错误:

usage: myprog.py [-h] [-n NAMES_LIST]
myprog.py: error: unrecognized arguments: name2

我知道我可以用引号"name1 name2"传递名称,并在我的代码中使用args.names_list.split()进行拆分。 但是我很好奇,是否有更好的方法通过argparse模块传递字符串列表。

任何想法都将不胜感激。

谢谢!

3个回答

90

你需要定义--names-list以接受任意数量的参数。

parser.add_argument('-n', '--names-list', nargs='+', default=[])

请注意,具有任意数量参数的选项通常与位置参数不兼容:

# Is this 4 arguments to -n, or
# 3 arguments and a single positional argument, or ...
myprog.py -n a b c d

3
--arg=value语法不支持这种操作吗?比如像--arg="one, two, three"这样的用法,而不需要分割字符串? - Ulf Gjerdingen
1
OP已经确认,在调用parse_args之后可以拆分字符串。 - chepner

16

4
parser.add_argument('-n', '--names-list', default=[], nargs='+')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接