【问题标题】:Python click show global option in help text of Sub-CommandPython单击子命令帮助文本中的显示全局选项
【发布时间】:2022-07-08 16:21:08
【问题描述】:

我试图弄清楚如何获得子命令帮助消息中显示的全局选项的帮助。

我创建了一个简单的 cli:

#!/usr/bin/env python
import click


@click.group()
@click.option("-l", "--log-level", help="Set log level.")
def cli(log_level):
    "CLI toolbox"
    print("root")


@cli.group()
def admin():
    print("admin")


@admin.command()
def invite():
    print("invite")


if __name__ == "__main__":
    cli()

不幸的是,全局选项没有显示在子命令的帮助屏幕上:

./cli.py --help
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

  CLI toolbox

Options:
  -l, --log-level TEXT  Set log level. <-- Option listed on global command
  --help                Show this message and exit.

Commands:
  admin
./cli.py admin --help
root
Usage: cli.py admin [OPTIONS] COMMAND [ARGS]...

Options:
     <- Option missing on command.
  --help  Show this message and exit.

Commands:
  invite

【问题讨论】:

    标签: python python-click


    【解决方案1】:

    这绝不是漂亮,但它通过定义自定义组来获取选项,因此我们可以覆盖帮助消息。然后它还会遍历所有子命令,但它已被硬编码为仅引用该特定组,而不是以编程方式推断它。

    import click
    
    
    @click.group()
    @click.option("-l", "--log-level", help="Set log level.")
    def cli(log_level):
        "CLI toolbox"
        print("root")
        # ctx = click.get_current_context()
    
    
    class CustomHelpGroup(click.Group):
        def format_help(self, ctx, formatter):
            parent = ctx.parent
            help_text = ['Greetings! Options:']
            for param in parent.command.get_params(ctx):
                help_text.append(' '.join(param.get_help_record(parent)))
            help_text.append("\n" + ctx.get_usage() + "\n")
            help_text.append('Commands:\n')
            help_text.extend([f'{command_name}' for command_name, command in admin.commands.items()])
            formatter.write('\n'.join(help_text))
    
    
    @cli.group(cls=CustomHelpGroup)
    def admin():
        print("admin")
    
    
    @admin.command()
    def invite():
        print("invite")
    
    
    if __name__ == "__main__":
        cli()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      相关资源
      最近更新 更多