为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理子组帮助消息

如何处理子组帮助消息

动漫人物 2021-11-23 19:14:35
我试图了解有关 Click 的一些实现细节。我有以下示例代码:#cli.pyimport click@click.group()def cli():    pass@cli.group()def show():    """ Define the environment of the product """    pass@show.command()def name():    click.echo("run show name command")@show.command()def height():    click.echo("run show height command")if __name__ == "__main__":    cli()与此代码,name并且height是子命令的的show基团。但是,从语义上讲,这并没有什么意义。他们越是这样的论点一个“show”命令的。我知道我可以有一个带有“属性”参数的命令,我可以根据“属性”的字符串值从中调用不同的函数。但是,我觉得一旦“属性”有几种可能性,维护起来会很乏味。我相信如果我能够编辑帮助消息,我仍然可以使用上述结构。当我运行时cli.py show --help,我会收到命令组的默认帮助消息:Usage: cli.py show [OPTIONS] COMMAND [ARGS]...  Define the environment of the productOptions:  --help  Show this message and exit.Commands:  height  name有没有办法编辑帮助消息以将“命令”更改为“参数”?我知道如何更改 click.group() 装饰器中的使用声明,但我不确定如何修改帮助消息本身。我想实现的帮助信息如下:Usage: cli.py show [OPTIONS] ARG  Define the environment of the productOptions:  --help  Show this message and exit.Arguments:  height  name这样的事情可能吗?
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您可以通过使用组的自定义类来更改子命令 help 给出的消息。可以通过继承click.Group和更改format_commands()方法来创建自定义类,例如:


自定义类:

class HelpAsArgs(click.Group):

    # change the section head of sub commands to "Arguments"


    def format_commands(self, ctx, formatter):

        rows = []

        for subcommand in self.list_commands(ctx):

            cmd = self.get_command(ctx, subcommand)

            if cmd is None:

                continue


            help = cmd.short_help or ''

            rows.append((subcommand, help))


        if rows:

            with formatter.section('Arguments'):

                formatter.write_dl(rows)

测试代码:

import click


@click.group()

def cli():

    pass


@cli.group(cls=HelpAsArgs)

def show():

    """ Define the environment of the product """

    pass


@show.command()

def name():

    click.echo("run show name command")


@show.command()

def height():

    click.echo("run show height command")


if __name__ == "__main__":

    commands = (

        'show',

        'show --help',

        '--help',

    )


    import sys, time


    time.sleep(1)

    print('Click Version: {}'.format(click.__version__))

    print('Python Version: {}'.format(sys.version))

    for command in commands:

        try:

            time.sleep(0.1)

            print('-----------')

            print('> ' + command)

            time.sleep(0.1)

            cli(command.split())


        except BaseException as exc:

            if str(exc) != '0' and \

                    not isinstance(exc, (click.ClickException, SystemExit)):

                raise

结果:

Click Version: 6.7

Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]

-----------

> show

Usage: test.py show [OPTIONS] COMMAND [ARGS]...


  Define the environment of the product


Options:

  --help  Show this message and exit.


Arguments:

  height

  name

-----------

> show --help

Usage: test.py show [OPTIONS] COMMAND [ARGS]...


  Define the environment of the product


Options:

  --help  Show this message and exit.


Arguments:

  height

  name

-----------

> --help

Usage: test.py [OPTIONS] COMMAND [ARGS]...


Options:

  --help  Show this message and exit.


Commands:

  show  Define the environment of the product


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信