如何处理子组帮助消息

我试图了解有关 Click 的一些实现细节。我有以下示例代码:


#cli.py


import 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 product


Options:

  --help  Show this message and exit.


Commands:

  height

  name

有没有办法编辑帮助消息以将“命令”更改为“参数”?我知道如何更改 click.group() 装饰器中的使用声明,但我不确定如何修改帮助消息本身。


我想实现的帮助信息如下:


Usage: cli.py show [OPTIONS] ARG


  Define the environment of the product


Options:

  --help  Show this message and exit.


Arguments:

  height

  name

这样的事情可能吗?


动漫人物
浏览 144回答 1
1回答

杨__羊羊

您可以通过使用组的自定义类来更改子命令 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.7Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]-----------> showUsage: test.py show [OPTIONS] COMMAND [ARGS]...  Define the environment of the productOptions:  --help  Show this message and exit.Arguments:  height  name-----------> show --helpUsage: test.py show [OPTIONS] COMMAND [ARGS]...  Define the environment of the productOptions:  --help  Show this message and exit.Arguments:  height  name-----------> --helpUsage: test.py [OPTIONS] COMMAND [ARGS]...Options:  --help  Show this message and exit.Commands:  show  Define the environment of the product
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python