如何让嵌套命令组对同一级别的子命令使用相同的名称,但在点击时实现不同?
How to have nested command groups use the same name for the same level of subcommands but different implementation in click?
我用的是click 8.0.3
我正在阅读这篇文章https://click.palletsprojects.com/en/8.0.x/commands/#merging-multi-commands,但我仍然感到困惑。
我想要的
我希望能够拥有这个
cli cli1 new
和
cli cli2 new
我试过的
我复制上面link中的相同代码
import click
@click.group()
def cli1():
pass
@cli1.command()
def cmd1():
"""Command on cli1"""
@click.group()
def cli2():
pass
@cli2.command()
def cmd2():
"""Command on cli2"""
cli = click.CommandCollection(sources=[cli1, cli2])
if __name__ == '__main__':
cli()
但我不知道如何在每个命令组 cli1 和 cli2 中添加单独的 def new
函数,以便每个 def new
可以显示为 new
但具有不同的实现。
我也不希望 cmd1 和 cmd2 处于同一级别。我希望 cli 以这种方式工作,其中延迟加载单独的 cli1 和 cli2 组。
我该怎么做?
我用下面的代码让它工作。基本上,创建一个顶级 cli
组,以及两个将作为命令添加的嵌套组,cli1
和 cli2
。定义方法非常简单,如 new_cli1
和 new_cli2
所示。默认情况下,单击从方法名称获取命令名称,但您可以选择通过将名称显式传递给 command
方法来自定义它,就像我们在此处所做的那样。
不过,您可以使用 click 提供的 CommandCollection
而不是显式添加 cli1
和 cli2
。但是不确定延迟加载。
@click.group()
def cli():
pass
@click.group()
def cli1():
pass
@cli1.command('new')
def new_cli1():
print('cli1 > new')
@click.group()
def cli2():
pass
@cli2.command('new')
def new_cli2():
print('cli2 > new')
if __name__ == '__main__':
cli.add_command(cli1)
cli.add_command(cli2)
cli()
很好。我只是想建议你,如果你的代码可能会超过这 20 行,将每个组分开在它自己的模块中。更容易维护,你不会再有这样的问题:)
我用的是click 8.0.3
我正在阅读这篇文章https://click.palletsprojects.com/en/8.0.x/commands/#merging-multi-commands,但我仍然感到困惑。
我想要的
我希望能够拥有这个
cli cli1 new
和
cli cli2 new
我试过的
我复制上面link中的相同代码
import click
@click.group()
def cli1():
pass
@cli1.command()
def cmd1():
"""Command on cli1"""
@click.group()
def cli2():
pass
@cli2.command()
def cmd2():
"""Command on cli2"""
cli = click.CommandCollection(sources=[cli1, cli2])
if __name__ == '__main__':
cli()
但我不知道如何在每个命令组 cli1 和 cli2 中添加单独的 def new
函数,以便每个 def new
可以显示为 new
但具有不同的实现。
我也不希望 cmd1 和 cmd2 处于同一级别。我希望 cli 以这种方式工作,其中延迟加载单独的 cli1 和 cli2 组。
我该怎么做?
我用下面的代码让它工作。基本上,创建一个顶级 cli
组,以及两个将作为命令添加的嵌套组,cli1
和 cli2
。定义方法非常简单,如 new_cli1
和 new_cli2
所示。默认情况下,单击从方法名称获取命令名称,但您可以选择通过将名称显式传递给 command
方法来自定义它,就像我们在此处所做的那样。
不过,您可以使用 click 提供的 CommandCollection
而不是显式添加 cli1
和 cli2
。但是不确定延迟加载。
@click.group()
def cli():
pass
@click.group()
def cli1():
pass
@cli1.command('new')
def new_cli1():
print('cli1 > new')
@click.group()
def cli2():
pass
@cli2.command('new')
def new_cli2():
print('cli2 > new')
if __name__ == '__main__':
cli.add_command(cli1)
cli.add_command(cli2)
cli()