用户输入提示

在两个不同的位置Click支持提示。第一种是在参数处理发生时自动提示,第二种是在以后的某个点单独请求提示。

这可以通过 prompt() 函数,根据类型要求有效输入,或 confirm() 功能,要求确认(是/否)。

选项提示

选项提示集成到选项界面中。 在内部,它会自动调用 prompt()confirm() 根据需要。

在某些情况下,您需要可以从命令行提供的参数,但如果没有提供,请请求用户输入。 这可以通过定义提示字符串来使用Click来实现。

示例:

@click.command()
@click.option('--name', prompt=True)
def hello(name):
    click.echo(f"Hello {name}!")

它看起来是什么样子:

$ hello --name=John
Hello John!
$ hello
Name: John
Hello John!

如果您对默认提示字符串不满意,可以请求不同的提示字符串:

@click.command()
@click.option('--name', prompt='Your name please')
def hello(name):
    click.echo(f"Hello {name}!")

它看起来是什么样子:

$ hello
Your name please: John
Hello John!

建议不要将提示与设置为True的多重标志一起使用。相反,在函数中交互式提示。

默认情况下,如果未通过命令行传递输入,系统将提示用户输入。要关闭此行为,请参阅 可选值 .

输入提示

要手动请求用户输入,可以使用 prompt() 功能。默认情况下,它接受任何Unicode字符串,但您可以请求任何其他类型。例如,您可以请求一个有效的整数:

value = click.prompt('Please enter a valid integer', type=int)

此外,如果提供默认值,类型将自动确定。例如,以下内容只接受浮动:

value = click.prompt('Please enter a number', default=42.0)

可选预算

如果选项有 prompt 启用,然后设置 prompt_required=False 告诉Click仅在给出该选项的标志时显示提示,而不是在根本没有提供该选项时显示提示。

@click.command()
@click.option('--name', prompt=True, prompt_required=False, default="Default")
def hello(name):
    click.echo(f"Hello {name}!")
$ hello
Hello Default!
$ hello --name Value
Hello Value!
$ hello --name
Name [Default]: 

如果 required=True ,那么如果没有给出该选项,该选项仍然会提示,但如果只给出了标志,该选项也会提示。

确认提示

要询问用户是否要继续操作,请 confirm() 功能很有用。默认情况下,它以布尔值的形式返回提示的结果:

if click.confirm('Do you want to continue?'):
    click.echo('Well done!')

还有一个选项可以使函数在不返回时自动中止程序的执行。 True ::

click.confirm('Do you want to continue?', abort=True)

预算的动态收件箱

auto_envvar_prefixdefault_map 上下文的选项允许程序从环境或配置文件中读取选项值。 然而,这会覆盖提示机制,因此用户无法获得交互式更改值的选项。

如果您想让用户配置默认值,但如果没有在命令行上指定该选项,仍然会出现提示,则可以通过提供可调用作为默认值来实现此目标。例如,要从环境获取默认值:

import os

@click.command()
@click.option(
    "--username", prompt=True,
    default=lambda: os.environ.get("USER", "")
)
def hello(username):
    click.echo(f"Hello, {username}!")

要描述默认值,请将其设置 show_default .

import os

@click.command()
@click.option(
    "--username", prompt=True,
    default=lambda: os.environ.get("USER", ""),
    show_default="current user"
)
def hello(username):
    click.echo(f"Hello, {username}!")
$ hello --help
Usage: hello [OPTIONS]

Options:
  --username TEXT  [default: (current user)]
  --help           Show this message and exit.