在 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
我在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