用户输入提示¶
在两个不同的位置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_prefix
和 default_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.