我正在尝试使用 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.
有人知道我应该开始研究的方向吗?