我试图用argparse传递参数列表,但我发现的唯一方法是重写我想传递的每个参数的选项:
我目前使用的是:
main.py -t arg1 -a arg2
我希望:
main.py -t arg1 arg2 ...
这是我的代码:
parser.add_argument("-t", action='append', dest='table', default=[], help="")
答案 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
选项,则应直接允许传递参数。它使用户更简单。