gpt4 book ai didi

python - 命令之间的共享选项和标志

转载 作者:太空狗 更新时间:2023-10-29 21:28:14 25 4
gpt4 key购买 nike

假设我的 CLI 实用程序具有三个命令:cmd1cmd2cmd3

我希望 cmd3 具有与 cmd1cmd2 相同的选项和标志。就像某种继承。

@click.command()
@click.options("--verbose")
def cmd1():
pass

@click.command()
@click.options("--directory")
def cmd2():
pass

@click.command()
@click.inherit(cmd1, cmd2) # HYPOTHETICAL
def cmd3():
pass

因此 cmd3 将具有标志 --verbose 和选项 --directory。可以用 Click 实现吗?也许我只是忽略了文档中的某些内容...

编辑:我知道我可以用 click.group() 来做到这一点。但是所有组的选项必须在组的命令之前指定。我想在命令后正常拥有所有选项。

cli.py --verbose --directory/tmp cmd3 -> cli.py cmd3 --verbose --directory/tmp

最佳答案

我找到了一个简单的解决方案!我稍微编辑了来自 https://github.com/pallets/click/issues/108 的片段:

import click


_cmd1_options = [
click.option('--cmd1-opt')
]

_cmd2_options = [
click.option('--cmd2-opt')
]


def add_options(options):
def _add_options(func):
for option in reversed(options):
func = option(func)
return func
return _add_options


@click.group()
def group(**kwargs):
pass


@group.command()
@add_options(_cmd1_options)
def cmd1(**kwargs):
print(kwargs)


@group.command()
@add_options(_cmd2_options)
def cmd2(**kwargs):
print(kwargs)


@group.command()
@add_options(_cmd1_options)
@add_options(_cmd2_options)
@click.option("--cmd3-opt")
def cmd3(**kwargs):
print(kwargs)


if __name__ == '__main__':
group()

关于python - 命令之间的共享选项和标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com