在单个CLI命令下合并多个单击命令的参数和选项

2024-04-25 23:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一种方法可以将多个命令分组,每个命令在一个函数下具有各自不同的参数

乍一看,MultiCommandGroup似乎是做我想做的事情的一种自然方式,即让一个主命令充当Group(并传递invoke_without_command=True标志),然后将辅助Command作为子命令嵌套在它下面。但是,这并不是我想要的行为,因为我希望所有命令中的所有选项都能够在不显式调用子命令的情况下指定。此外,如果不在命令行上调用子命令,使用Group也不会显示子命令的帮助文本

我想理想情况下我想要的是一种将多个命令分组在一起的方法,而不需要Click的GroupAPI固有的嵌套

抱歉,如果这个问题可能有点笼统。任何能为我指明正确方向的帮助、想法或提示都将不胜感激

下面是我想要的概要(文件名:cli_test.py):

import click


@click.command()
@click.option('--db-file', type=click.File(mode='r'))
def db_reader(db_file):
    click.echo(db_file)


@click.command()
@click.option('--xval', type=float)
@click.option('--yval', type=float)
def get_vals(xval, yval):
    return xval, yval


@click.command()
@click.option('--absolutize/--no-absolutize')
def flagger(absolutize):
    click.echo(absolutize)


@click.command()
def cli_runner():
    db = db_reader.main(standalone_mode=False)
    vals = flagger.main(standalone_mode=False)
    flag = flagger.main(standalone_mode=False)


if __name__ == '__main__':
    cli_runner()

本质上,我想要一个可以在CLI上运行的命令(cli_runner,在上面的示例中),该命令能够获取其中调用的所有Click命令的参数,然后将它们的处理分派到适当的Command实例。然而,现在,如果我在CLI上调用:$ python cli_test.py --xval 4,我会得到错误Error: no such option: --xval。我也尝试过使用pass_contextctx.invoke()方法,但同样的问题也存在

我想我可以将所有包含的命令中的参数传递到cli_runner,但这将破坏我想要做的事情的目的,即最终拥有3-4个模块化的“子命令”,然后可以以不同的组合组合组合在一起,形成更大的接口,为稍微不同的用例提供服务


Tags: 方法命令dbclimainmodedefgroup