![](/img/trans.png)
[英]Argparse: how to handle variable number of arguments (nargs='*')
[英]Variable Number of narg Arguments Python Argparse
这可能超出了argparse模块的范围,但是我将尝试通过一个示例来描述我的问题。
我有一些水果,并且每个水果都有一些文件。 特别是苹果,香蕉和橙子。 苹果具有与之相关联的10个文件,香蕉有7,和橙子具有9.我可以硬编码-a
, -b
, -o
每次服用nargs='+'
来处理在Python命令行脚本这种玩具的例子。 但是说我的水果数量不固定,或者数量很多(也许是50)。 硬编码每种类型的标志会很疯狂,这里最好的解决方案是什么?
我将为每个结果创建一个参数,但是我将以DRYest的方式进行操作:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-i", "--insecticide")
for fruit, nargs in (
('Apple', 10),
('Banana', 7),
('Orange', 9),
):
parser.add_argument(
"--" + fruit.lower(), nargs=nargs, metavar='FLIES',
help="specify {} species of {} pests".format(nargs, fruit))
args = parser.parse_args()
print(args)
这是产生的帮助消息:
$ python x.py -h
usage: x.py [-h] [-i INSECTICIDE]
[--apple FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES]
[--banana FLIES FLIES FLIES FLIES FLIES FLIES FLIES]
[--orange FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES]
optional arguments:
-h, --help show this help message and exit
-i INSECTICIDE, --insecticide INSECTICIDE
--apple FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES
specify 10 species of Apple pests
--banana FLIES FLIES FLIES FLIES FLIES FLIES FLIES
specify 7 species of Banana pests
--orange FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES FLIES
specify 9 species of Orange pests
如果有可变数量的水果(例如,由环境变量控制或存在配置文件),则不会对我的循环进行硬编码,而可能是:
for config_section in config_data():
parser.add_argument("--" + config_section.name, ...)
如果我想按顺序命名参数(如OP的注释所示),则可以对循环进行编码:
for i, fruit in enumerate(fruit_names, 1):
parser.add_argument("--x{}".format(i),
nargs="+",
help="{} files".format(fruit))
这是产生的帮助消息:
$ python x2.py -h
usage: x2.py [-h] [-i INSECTICIDE] [--x1 X1 [X1 ...]] [--x2 X2 [X2 ...]]
[--x3 X3 [X3 ...]]
optional arguments:
-h, --help show this help message and exit
-i INSECTICIDE, --insecticide INSECTICIDE
--x1 X1 [X1 ...] Apple files
--x2 X2 [X2 ...] Banana files
--x3 X3 [X3 ...] Orange files
例如,您可以使用nargs=7
,它将仅接受7(如果未输入标志,则返回None
)。
例如,添加
parser.add_argument('-x', nargs=7, help='testing')
到参数列表并print args.x
假设您的文件是a.py
$ python a.py
>无
$ python a.py -x 1
> a.py:错误:参数-x:预期的7个参数
$ python a.py -x 1 2 3 4 5 6 7
> ['1','2','3','4','5','6','7']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.