如何使用 Python 中的 argparse.ArgumentParser 从命令行传递和解析字符串列表?
How to pass and parse a list of strings from command line with argparse.ArgumentParser in Python?
我想从控制台将名称列表传递到我用 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
模块传递字符串列表。
如有任何想法,我们将不胜感激。
谢谢!
parser.add_argument('-n', '--names-list', default=[], nargs='+')
您需要定义 --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
你需要使用nargs
:
parser.add_argument('-n', '--names-list', nargs="*")
我想从控制台将名称列表传递到我用 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
模块传递字符串列表。
如有任何想法,我们将不胜感激。
谢谢!
parser.add_argument('-n', '--names-list', default=[], nargs='+')
您需要定义 --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
你需要使用nargs
:
parser.add_argument('-n', '--names-list', nargs="*")