单击 (Meta) 命令以 运行 命令列表

Click (Meta) Command to run a list of commands

我需要能够从 CLI 上的一个命令触发多个点击命令

假设我有一个点击组

@click.group()
def cli():
    pass

@cli.command()
def a():
    print("A")

@cli.command()
def b():
    print ("B")

我应该向 运行 如下命令的有序列表添加什么功能?

$ python -m my_cli_module a,b
A
B

目标是为我的每个命令初始化共享变量。初始化很昂贵,我想 运行 只初始化一次。

要链接您的命令,您必须将 chain=True 传递给您的组。 有关详细信息,请参阅 this part of the documentation

您可以在组上使用 @click.pass_context 装饰器来存储您的初始化结果:

@click.group(chain=True)
@click.pass_context
def cli(ctx):
    # Your init here resulting in an object
    ctx.obj = the_result_of_your_init

然后您需要在命令上使用 @click.pass_obj 装饰器以使用结果对象:

@cli.command()
@click.pass_obj
def a(my_obj): # The first param of the command is the passed object
    print("A")

上面的模式对于共享资源很有用。我用它来分享我的 sqlite 数据库连接作为例子。

有关详细信息,请参阅以下文档:

pass_context documentation

pass_obj documentation

实现此目的的另一种方法是使用 multi command pipelines