单击:使用CommandCollection()后第一个命令的选项不可用

时间:2017-05-27 07:27:46

标签: python python-click

我想要两个独立的子命令,每个子命令都有不同的选项。

E.g。 -

command first --one --two
command second --three

选项onetwo仅适用于子命令firstthree,适用于子命令second

我的代码格式为:

@click.group()
@click.option('--one')
@click.option('--two') 
def cli1():
 print("clione")
@cli1.command()
def first():
   pass

@click.group()
@click.option('--three')
def cli2():
 print("clitwo")
@cli2.command()
def second():
   pass

cli = click.CommandCollection(sources=[cli1, cli2])

if __name__ == '__main__':
     cli()  

但是在运行它之后,我无法为每个子命令运行任何选项。

我用过这个:Merging Multi Commands

1 个答案:

答案 0 :(得分:1)

我发现执行子命令最简单的方法是只使用一个组,我通常将该组cli命名为:

@click.group()
def cli():
    pass

使用组的名称,声明如下命令:

@cli.command()
def name_of_command():
    ....

测试代码:

import click

@click.group()
def cli():
    pass

@cli.command()
@click.option('--one')
@click.option('--two')
def first(one, two):
    click.echo("clione %s %s" % (one, two))

@cli.command()
@click.option('--three')
def second(three):
    click.echo("clitwo %s" % three)

cli('first --one 4'.split())

结果

clione 4 None