click.Choice для нескольких аргументов

Поэтому я хочу добиться того, чтобы аргументы были частью определенного предопределенного набора (здесь tool1, tool2, tool3), как с @click.option а также type=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 и проверить вход в самой функции?

Поскольку я довольно новичок в программировании интерфейсов командной строки, особенно с щелчком мыши, и только начинаю копать глубже в python, я был бы признателен за рекомендации по аккуратному решению этой проблемы.

1 ответ

Решение

Как оказалось, я неправильно понял использование 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)

и, таким образом, делает возможным выбор нескольких инструментов из вариантов.

Другие вопросы по тегам