argparse的参数列表

时间:2014-05-06 08:55:32

标签: python argparse

我试图用argparse传递参数列表,但我发现的唯一方法是重写我想传递的每个参数的选项:

我目前使用的是:

main.py -t arg1 -a arg2

我希望:

main.py -t arg1 arg2 ...

这是我的代码:

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

2 个答案:

答案 0 :(得分:13)

使用nargs

  

ArgumentParser 对象通常关联单个命令行   要采取单一行动的论点。 nargs 关键字参数   将一个不同数量的命令行参数与一个相关联   动作。

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

  

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

因此,您的代码看起来像

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

这样-t个参数会自动收集到list(您不必明确指定action)。

答案 1 :(得分: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选项,则应直接允许传递参数。它使用户更简单。