在 python 中为两个组提供命令单击?

Make a command available for two groups in python click?

我在Python中使用click写cli程序,需要这样写:

import click


@click.group()
def root():
    """root"""
    pass


@root.group()
def cli():
    """test"""
    pass


@root.group()
def cli2():
    """test"""
    pass


@cli.command('test1')
@cli2.command('test1')
def test1():
    """test2"""
    print 1234
    return


root()

但这会失败:

TypeError: Attempted to convert a callback into a command twice.

如何在多个组之间共享命令?

group.command() 装饰器是一个快捷方式,它执行两个功能。一种是创建命令,另一种是将命令附加到组。

因此,要与多个组共享一个命令,您可以像这样装饰一个组的命令:

@cli.command('test1')

然后,由于命令已经创建,您可以简单地将点击命令对象添加到其他组,如:

cli2.add_command(test1)

测试代码:

import click


@click.group()
def root():
    """root"""
    pass


@root.group()
def cli1():
    click.echo('cli1')


@root.group()
def cli2():
    click.echo('cli2')


@cli1.command('test1')
@click.argument('arg1')
def test1(arg1):
    click.echo('test1: %s' % arg1)

cli2.add_command(test1)

root('cli2 test1 an_arg'.split())

结果:

cli2
test1: an_arg