10

Click を使用した CLI 解析の標準的ではないことを達成しようとしていますが、部分的にしか機能しません。

  • メイン CLI には複数のサブコマンドがあります (「show」と「check」の下のサンプル)
  • これらのコマンドはどちらもオプションの引数を持っている可能性がありますが、引数は前にあり、後にありません
  • その引数を「上の」グループで処理し、コンテキストで値を渡すことにしました

サンプル:

import click

@click.group()
@click.argument('hostname', required=False)
@click.pass_context
def cli(ctx, hostname=None):
    """"""
    ctx.obj = hostname
    click.echo("cli: hostname={}".format(hostname))

@cli.command()
@click.pass_obj
def check(hostname):
    click.echo("check: hostname={}".format(hostname))

@cli.command()
@click.pass_obj
def show(hostname):
    click.echo("check: hostname={}".format(hostname))

if __name__ == '__main__':
    cli()

ホスト名の部分は機能します:

> pipenv run python cli.py  localhost check
cli: hostname=localhost
check: hostname=localhost
> pipenv run python cli.py  localhost show
cli: hostname=localhost
check: hostname=localhost

しかし、ホスト名のない部分はそうではありません:

> pipenv run python cli.py show
Usage: cli.py [OPTIONS] [HOSTNAME] COMMAND [ARGS]...

Error: Missing command.

誰かが私が調べ始めるべき方向について考えを持っていますか?

4

1 に答える 1