如何告诉“单击”始终显示选项默认值

问题描述 投票:0回答:2

在 Python 的 Click 包中,我可以定义选项的默认值:

@click.option("--count", default=1, help="Number of greetings.")

我可以指定默认值应显示在帮助中:

@click.option("--count", default=1, help="Number of greetings.", show_default=True)

如果我有很多选择

@click.option("--count-a", default=1, help="...")
@click.option("--count-b", default=2, help="...")
@click.option("--count-c", default=4, help="...")
.
.
.

如何告诉 Click 一般在帮助中always显示默认值(无需明确将

show_default=True
添加到每个选项的参数列表中)?

python command-line-interface python-click
2个回答
24
投票

最适合的方法可能是更改

@click.command
装饰器中的上下文设置。像这样:

@click.command("cli", context_settings={'show_default': True})
@click.option("-x")
@click.option("-y", default="Custom Y")
@click.option("-z", default="Custom Z", help="Value of Z.")
def cli(x, y, z):
    """Test changing context settings"""
    return "OK"

if __name__ == '__main__':
    cli()

这将打印以下内容:

Usage: test.py [OPTIONS]

  Test changing context settings

Options:
  -x TEXT
  -y TEXT  [default: Custom Y]
  -z TEXT  Value of Z.  [default: Custom Z]
  --help   Show this message and exit. 

3
投票

您可以非常轻松地定义自己的函数,例如:

代码

def click_option(*args, **kwargs):
    return click.option(*args, show_default=True, **kwargs)

或者如果您想在各个选项装饰器中覆盖

show_default

def click_option(*args, **kwargs):
    if not 'show_default' in kwargs:
        kwargs.update({'show_default': True})
    return click.option(*args, **kwargs)

测试代码:

import click

def click_option(*args, **kwargs):
    if not 'show_default' in kwargs:
        kwargs.update({'show_default': True})
    return click.option(*args, **kwargs)

@click.command()
@click_option('--an-option', default='The Default')
def cli(an_option):
    """An Awesome CLI"""

if __name__ == "__main__":
    cli(['--help'])

结果:

Usage: test.py [OPTIONS]

  An Awesome CLI

Options:
  --an-option TEXT  [default: The Default]
  --help            Show this message and exit.
© www.soinside.com 2019 - 2024. All rights reserved.