单击 (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 数据库连接作为例子。
有关详细信息,请参阅以下文档:
实现此目的的另一种方法是使用 multi command pipelines。
我需要能够从 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 数据库连接作为例子。
有关详细信息,请参阅以下文档:
实现此目的的另一种方法是使用 multi command pipelines。