argparse参数列表

8 投票
2 回答
4201 浏览
提问于 2025-04-18 05:31

我正在尝试使用argparse来传递一系列参数,但我发现的唯一方法是为我想传递的每个参数都重新写一遍选项:

我现在使用的是:

main.py -t arg1 -a arg2

我希望这样:

main.py -t arg1 arg2 ...

这是我的代码:

parser.add_argument("-t", action='append', dest='table', default=[], help="")

2 个回答

1

你提到想要使用 argparse 的解决方案,我想给你介绍一个使用 docopt 包的替代方案。

首先,你需要先安装它:

$ pip install docopt

接下来,写下代码:

"""Usage:
    main.py -a <arg>...
"""

if __name__ == "__main__":
    from docopt import docopt
    resargs = docopt(__doc__)
    print resargs

运行它来显示使用说明:

$ python main.py
Usage:
    main.py -a <arg>...

用你的参数调用它:

$ python main.py -a AA BB CC
{'-a': True,
 '<arg>': ['AA', 'BB', 'CC']}

顺便说一下,如果你不需要 -a 这个选项,可以直接允许传递参数。这样对用户来说使用起来会更简单。

15

使用 nargs

ArgumentParser 对象通常会把一个命令行参数和一个要执行的动作联系起来。而 nargs 这个关键字参数则可以把不同数量的命令行参数和一个动作关联起来。

举个例子,如果 nargs 设置为 '+'

就像 '*' 一样,所有的命令行参数会被收集到一个列表中。不过,如果没有至少一个命令行参数,程序就会报错。

所以,你的代码看起来会是这样的:

parser.add_argument('-t', dest='table', help='', nargs='+')

这样一来,-t 参数就会自动收集到 list 里(你不需要特别指定 action)。

撰写回答