argparse的参数列表

8
我将尝试使用argparse传递参数列表,但我找到的唯一方法是针对我想要传递的每个参数重新编写选项:
目前我使用的代码如下:
main.py -t arg1 -a arg2

and I would like:

main.py -t arg1 arg2 ...

这是我的代码:
parser.add_argument("-t", action='append', dest='table', default=[], help="")
2个回答

15

使用nargs:

ArgumentParser对象通常将单个命令行参数与单个操作关联。 nargs关键字参数将不同数量的命令行参数与单个操作相关联。

例如,如果将nargs设置为'+'

'*'一样,所有存在的命令行参数都被收集到一个列表中。此外,如果不存在至少一个命令行参数,则会生成错误消息。

因此,您的代码将如下所示:

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

那样,-t 参数将自动汇集到 list 中(您不必明确指定 action)。

1
非常感谢,如果我添加nargs,只需将action='store',它就能完美运行。 - CondaKan
@CondaKan store 是默认操作,您不必显式指定它。 - vaultah

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选项,则应直接允许传递参数。这使用户的使用更加简单。

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