在 python click 中为两个组提供一个命令?

Pur*_*ite 5 python command-line-interface python-2.7 python-click

我正在使用 click 在 Python 中编写一个 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()
Run Code Online (Sandbox Code Playgroud)

但这将失败:

类型错误:尝试将回调转换为命令两次。

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

Ste*_*uch 4

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

因此,要与多个组共享命令,您可以为一个组装饰命令,如下所示:

@cli.command('test1')
Run Code Online (Sandbox Code Playgroud)

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

cli2.add_command(test1)
Run Code Online (Sandbox Code Playgroud)

测试代码:

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())
Run Code Online (Sandbox Code Playgroud)

结果:

cli2
test1: an_arg
Run Code Online (Sandbox Code Playgroud)