Click嵌套命令场景下如何在子命令帮助页展示父级命令选项
方案1:原生自定义Group类(无额外依赖)
通过继承click.Group重写帮助格式化方法,主动把父级命令的选项注入到子命令的帮助输出中,修改后的代码如下:
# foo.py import click # 自定义Group类,实现子命令帮助展示全局选项 class GroupWithGlobalOptions(click.Group): def format_help(self, ctx, formatter): # 优先输出父级的全局选项 if ctx.parent: with formatter.section("全局选项"): ctx.parent.command.format_options(ctx.parent, formatter) # 输出子命令原本的帮助内容 super().format_help(ctx, formatter) # 声明group时指定使用自定义类 @click.group(cls=GroupWithGlobalOptions) @click.option("--debug/--no-debug", default=False) @click.pass_context def cli(ctx, debug): ctx.ensure_object(dict) ctx.obj["DEBUG"] = debug @cli.command() @click.pass_context def sync(ctx): click.echo(f"Debug is {'on' if ctx.obj['DEBUG'] else 'off'}") if __name__ == "__main__": cli(obj={})
修改后运行python foo.py sync --help输出如下:
Usage: foo.py sync [OPTIONS] 全局选项: --debug / --no-debug --help Show this message and exit. Options: --help Show this message and exit.
方案2:使用第三方库click-extra(最小代码改动)
如果可以引入外部依赖,click-extra已经内置了该功能,只需两步即可实现:
- 安装依赖:
pip install click-extra - 把原本的
@click.group()替换为@click_extra.group()即可,无需其他代码修改。
该方案除了自动展示全局选项外,还自带帮助文本高亮、命令自动补全等额外功能,适合快速开发场景。
内容的提问来源于stack exchange,提问作者Dror
相关产品推荐
相关产品推荐

