18

したがって、私が達成したいのは、 with と のように、引数が特定の事前定義されたセット (ここでは tool1、tool2、tool3) の一部であることを保証すると@click.option同時に、 withtype=click.Choice()のように複数の引数を渡すことができるようにすることです。@click.argumentnargs=-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 をより深く掘り下げ始めたばかりなので、この問題を適切に処理する方法についての推奨事項をいただければ幸いです。

4

1 に答える 1

24

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)

したがって、選択肢からいくつかのツールを選択することが可能になります。

于 2016-06-03T21:41:06.680 に答える