click.Choice多个参数

时间:2016-05-27 14:43:29

标签: python python-click

所以我想要实现的是确保参数是某些预定义集合(此处为tool1,tool2,tool3)的一部分,与@click.optiontype=click.Choice()一样,同时能够使用@click.argument传递多个参数,例如nargs=-1

import click

@click.command()
@click.option('--tools', type=click.Choice(['tool1', 'tool2', 'tool3']))
@click.argument('programs', nargs=-1)
def chooseTools(programs, tools):
    """Select one or more tools to solve the task"""

    # Selection of only one tool, but it is from the predefined set
    click.echo("Selected tools with 'tools' are {}".format(tools))

    # Selection of multiple tools, but no in-built error handling if not in set
    click.echo("Selected tools with 'programs' are {}".format(programs))

这可能是这样的例子:

python selectTools.py --tools tool1 tool3 tool2 nonsense
Selected tools with 'tools' are tool1
Selected tools with 'programs' are (u'tool3', u'tool2', u'nonsense')

点击中是否有任何内置方式来实现? 或者我应该只使用@click.argument并检查函数本身的输入?

由于我对编程命令行界面很陌生,特别是对于click,并且只是开始深入挖掘python,我将非常感谢如何以一种简洁的方式处理这个问题的建议。

1 个答案:

答案 0 :(得分:10)

事实证明,在使用multiple=True时,我误解了@click.option的使用情况。

例如,可以多次调用-t

python selectTools.py -t tool1 -t tool3 -t tool2

使用

@click.option('--tools', '-t', type=click.Choice(['tool1', 'tool2', 'tool3']), multiple=True)

因此可以从可能的选择中选择几个工具。