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

问题描述 投票:0回答:4

我想从控制台将名称列表传递到用 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
模块传递字符串列表。

任何想法将不胜感激。

谢谢!

python argparse
4个回答
92
投票

您需要定义

--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

17
投票

您需要使用

nargs

parser.add_argument('-n', '--names-list', nargs="*")

https://docs.python.org/3/library/argparse.html#nargs


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

0
投票

另一种选择是在命令行上重复参数。

为此,请将操作更改为追加。

parser.add_argument('-n', '--names-list', action="append")

从终端您可以拨打:

python myprog.py -n name1 -n name2 -n name3

结果将是:

Namespace(n=['name1', 'name2', 'name3'])
© www.soinside.com 2019 - 2024. All rights reserved.