跳至内容

CLI 选项提示

除了只显示错误之外,还可以使用 prompt=True 询问缺少的值

import typer
from typing_extensions import Annotated


def main(name: str, lastname: Annotated[str, typer.Option(prompt=True)]):
    print(f"Hello {name} {lastname}")


if __name__ == "__main__":
    typer.run(main)

提示

如果可能,最好使用 Annotated 版本。

import typer


def main(name: str, lastname: str = typer.Option(..., prompt=True)):
    print(f"Hello {name} {lastname}")


if __name__ == "__main__":
    typer.run(main)

然后,你的程序将在终端中向用户询问它

// Call it with the NAME CLI argument
$ python main.py Camila

// It asks for the missing CLI option --lastname
# Lastname: $ Gutiérrez

Hello Camila Gutiérrez

自定义提示

你还可以设置自定义提示,传递要使用的字符串,而不仅仅是 True

import typer
from typing_extensions import Annotated


def main(
    name: str,
    lastname: Annotated[str, typer.Option(prompt="Please tell me your last name")],
):
    print(f"Hello {name} {lastname}")


if __name__ == "__main__":
    typer.run(main)

提示

如果可能,最好使用 Annotated 版本。

import typer


def main(
    name: str, lastname: str = typer.Option(..., prompt="Please tell me your last name")
):
    print(f"Hello {name} {lastname}")


if __name__ == "__main__":
    typer.run(main)

然后,你的程序将使用你的自定义提示进行询问

// Call it with the NAME CLI argument
$ python main.py Camila

// It uses the custom prompt
# Please tell me your last name: $ Gutiérrez

Hello Camila Gutiérrez

确认提示

在某些情况下,您可能需要提示输入一些内容,然后要求用户通过两次输入来确认。

您可以通过传递参数 confirmation_prompt=True 来做到这一点。

假设这是一个用于删除项目的 CLI 应用程序

import typer
from typing_extensions import Annotated


def main(
    project_name: Annotated[str, typer.Option(prompt=True, confirmation_prompt=True)],
):
    print(f"Deleting project {project_name}")


if __name__ == "__main__":
    typer.run(main)

提示

如果可能,最好使用 Annotated 版本。

import typer


def main(project_name: str = typer.Option(..., prompt=True, confirmation_prompt=True)):
    print(f"Deleting project {project_name}")


if __name__ == "__main__":
    typer.run(main)

它将提示用户输入一个值,然后进行确认

$ python main.py

// Your app will first prompt for the project name, and then for the confirmation
# Project name: $ Old Project
# Repeat for confirmation: $ Old Project

Deleting project Old Project

// If the user doesn't type the same, receives an error and a new prompt
$ python main.py

# Project name: $ Old Project
# Repeat for confirmation: $ New Spice

Error: The two entered values do not match

# Project name: $ Old Project
# Repeat for confirmation: $ Old Project

Deleting project Old Project

// Now it works 🎉