使用单击.CommandCollection删除组选项

2024-05-29 03:54:05 发布

您现在位置:Python中文网/ 问答频道 /正文

import click

@click.group()
@click.option('--username')
def cli1(username):
    click.echo(username)

@cli1.command()
def something():
    click.echo('howdy')

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

@cli2.command()
def somethingelse():
    click.echo('doody')

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

if __name__ == '__main__':
    cli()

我希望这将允许我将--username传递给something,但是当我运行这个脚本时:

^{pr2}$

我得到:

Error: no such option: --username

似乎使用CommandCollection会破坏我的选择。以前有人处理过这个吗?在点击式回购中有一张空头支票,自2015年以来一直未被触及,也没有解决方案。在


Tags: importechoclidefgroupusernamepasssomething
1条回答
网友
1楼 · 发布于 2024-05-29 03:54:05

有了一点新的管道,这是可以做到的。在

怎么回事??

您可以从click.Group继承,然后将创建的类传递给click.group(),如下所示:

@click.group(cls=GroupWithCommandOptions)

在新类中,可以将组上的选项应用于命令进行解析,然后在命令调用期间,可以使用适当的选项调用group函数。在

新组类:

^{pr2}$

测试代码:

# Pass new group class to our group which needs options
@click.group(cls=GroupWithCommandOptions)
@click.option(' username')
def cli1(username):
    click.echo(username)


@cli1.command()
def something():
    click.echo('howdy')


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


@cli2.command()
def somethingelse():
    click.echo('doody')


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

if __name__ == '__main__':
    cli('something  username hi'.split())

结果:

hi
howdy

相关问题 更多 >

    热门问题