python - Python Click:如何打印有关使用错误的完整帮助详细信息?
问题描述
我正在为我的 CLI 使用 python click。当我传入错误的参数或标志集时,会弹出一条使用消息。但是,当我使用该--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
推荐阅读
- python - 如何从多个子进程登录到同一个文件
- html - 如何不对 :before 中添加的内容应用悬停效果?css
- git - Git 子模块获取不正确的提交哈希
- coq - 如何证明 le 的所有证明相等?
- snowflake-cloud-data-platform - 在 SELECT 中设置变量
- javascript - 如何使用 Svelte Routify 创建路由链接
- pixi.js - pixi.js 我如何获得绘制计数
- python - Pandas - 检查数据框是否在任何列中具有负值
- python - spotipy user_playlist_add_tracks() 的问题 无效的轨道 URI
- linux - grep 从另一组 grep/awk 命令管道输出的文件