Python Click: Как напечатать полную справочную информацию об ошибке использования? - PullRequest
0 голосов
/ 03 ноября 2018

Я использую python click для моего CLI. Когда я передаю неверный набор аргументов или флагов, появляется сообщение об использовании. Однако, когда я использую флаг --help, появляется более подробное сообщение об использовании со списком всех параметров и аргументов. Есть ли способ изменить поведение по умолчанию, чтобы ошибка использования выводила полную подробную справку?

Например, пропущенный аргумент выводит

mycli foo
Usage: mycli foo [OPTIONS] MY_ARG

Error: Missing argument "my_arg".

Но при добавлении --help отпечатков

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 Ответ

0 голосов
/ 05 ноября 2018

это может быть сделано путем исправления обезьян 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
...