代码之家  ›  专栏  ›  技术社区  ›  Jesse Shieh José Valim

Python Click:如何打印关于使用错误的完整帮助详细信息?

  •  3
  • Jesse Shieh José Valim  · 技术社区  · 6 年前

    --help 标记一个更详细的用法消息,弹出一个所有选项和参数的列表。是否有方法更改默认行为,以便使用错误打印完整的详细帮助?

    mycli foo
    Usage: mycli foo [OPTIONS] MY_ARG
    
    Error: Missing argument "my_arg".
    

    --救命 印刷品

    mycli foo --help
    Usage: mycli foo [OPTIONS] MY_ARG
    
      Long and useful description of the command and stuff.
    
    Options:
      -h, --help  Show this message and exit.
    

    命令的实现大致如下

    @click.group()
    @click.pass_context
    def cli(ctx):
        ctx.obj = {}
    
    @cli.command()
    @click.argument('my_arg')
    @click.pass_context
    @report_errors
    def foo(ctx, my_arg):
      # some stuff here
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   r-m-n    6 年前

    这可以通过猴子修补来完成 UsageError

    import click
    from click.exceptions import UsageError
    from click._compat import get_text_stderr
    from click.utils import echo
    
    
    def _show_usage_error(self, file=None):
        if file is None:
            file = get_text_stderr()
        color = None
        if self.ctx is not None:
            color = self.ctx.color
            echo(self.ctx.get_help() + '\n', file=file, color=color)
        echo('Error: %s' % self.format_message(), file=file, color=color)
    
    
    UsageError.show = _show_usage_error
    
    
    @click.group()
    @click.pass_context
    def cli(ctx):
        ctx.obj = {}
    
    @cli.command()
    @click.argument('my_arg')
    @click.pass_context
    @report_errors
    def foo(ctx, my_arg):
      # some stuff here