Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python单击:如何打印有关使用错误的完整帮助详细信息?_Python_Python Click - Fatal编程技术网

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

Python单击:如何打印有关使用错误的完整帮助详细信息?,python,python-click,Python,Python Click,我正在为我的CLI使用python单击。当我传入错误的参数集或标志集时,会弹出一条用法消息。但是,当我使用--help标志时,会弹出一条更详细的用法消息,其中列出了所有选项和参数。是否有方法更改默认行为,以便使用错误打印完整的详细帮助 例如,打印缺少的参数 mycli foo Usage: mycli foo [OPTIONS] MY_ARG Error: Missing argument "my_arg". 但是添加--help会打印 mycli foo --help Usage: myc

我正在为我的CLI使用python单击。当我传入错误的参数集或标志集时,会弹出一条用法消息。但是,当我使用
--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

可以通过猴子补丁
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

如果您给出一个示例来说明如何构建命令,那么这将更容易回答。有多种方法构建上述内容,它们的解决方案略有不同。