如何迭代所有可选参数及其相关值?

3

我是Python的新手,我想实现一个script.py来处理以下命令:

python script.py --opt value1 --opt value2 --opt value3 ... --opt valueN

并打印出所有--opt的值,如下所示:

value1
value2
value3
...
valueN

我该怎么做呢?


我的脚本是:

parser = argparse.ArgumentParser()
parser.add_argument("--opt", help="option description")
args = parser.parse_args()

for arg_opt in args.opt:
    print(arg_opt)

我尝试使用for循环来遍历--opt值,但没有成功:运行上述代码将仅输出最后一个--opt值。

1个回答

3

action参数设置为append

'append' - 这将存储一个列表,并将每个参数值附加到该列表中。这对于允许多次指定选项非常有用。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--opt", action='append')

args = parser.parse_args()
print(args.opt)

示例:

$ python test_argparse.py --opt value1 --opt value2 --opt value3
['value1', 'value2', 'value3']

如果在同一脚本中,我想处理这两种情况:一个是上面你正确回答了的 python script.py --opt value1 --opt value2 --opt value3 ... --opt valueN;另一个是 python script.py --opt value1 value2 value3 ... valueN 这种带有多个值的选项。也就是说,在最后一种情况下,我希望支持一个或多个 --opt 的多个值。有可能吗? - Backo
@Backo 在这种情况下指定 nargs='*' 应该会有所帮助。 - alecxe
nargs='*' 差不多符合我的需求,但它生成了“嵌套”的数组:当我运行 python script.py --opt value1 value2 --opt value3 --opt valueN 时,它输出的是 [['value1', 'value2'], ['value3'], ['valueN']]。而我需要的是 ['value1', 'value2', 'value3', 'valueN'] - Backo
@Backo 嗯,就我所知,如果你想支持两种情况 - 你需要处理嵌套输出。只需展平列表即可。 - alecxe

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