コンテンツへスキップ

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

確認プロンプト

場合によっては、何かをプロンプトで要求し、その後、ユーザーに2回入力して確認させることが必要な場合があります。

パラメータ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 🎉