コマンド CLI オプション
また、コマンドには独自の*CLI オプション*を持たせることができます。
事実、各コマンドがそれぞれ別の*CLI 引数*と*CLI オプション*を持つことができます。
import typer
from typing_extensions import Annotated
app = typer.Typer()
@app.command()
def create(username: str):
print(f"Creating user: {username}")
@app.command()
def delete(
username: str,
force: Annotated[
bool, typer.Option(prompt="Are you sure you want to delete the user?")
],
):
if force:
print(f"Deleting user: {username}")
else:
print("Operation cancelled")
@app.command()
def delete_all(
force: Annotated[
bool, typer.Option(prompt="Are you sure you want to delete ALL users?")
],
):
if force:
print("Deleting all users")
else:
print("Operation cancelled")
@app.command()
def init():
print("Initializing user database")
if __name__ == "__main__":
app()
ヒント
可能であれば、注釈
付きバージョンを使用することをお勧めします。
import typer
app = typer.Typer()
@app.command()
def create(username: str):
print(f"Creating user: {username}")
@app.command()
def delete(
username: str,
force: bool = typer.Option(..., prompt="Are you sure you want to delete the user?"),
):
if force:
print(f"Deleting user: {username}")
else:
print("Operation cancelled")
@app.command()
def delete_all(
force: bool = typer.Option(
..., prompt="Are you sure you want to delete ALL users?"
),
):
if force:
print("Deleting all users")
else:
print("Operation cancelled")
@app.command()
def init():
print("Initializing user database")
if __name__ == "__main__":
app()
ここでは、さまざまな CLI パラメータを持つ複数のコマンドを作成しました。
作成
:username
: CLI 引数。
削除
:username
: CLI 引数。--force
: CLI オプション。指定されないと、その旨のプロンプトが出ます。
すべて削除
:--force
: CLI オプション。指定されないと、その旨のプロンプトが出ます。
init
:- CLI パラメータを一切取りません。
// Check the help
python main.py --help
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to copy it or customize the installation.
--help Show this message and exit.
Commands:
create
delete
delete-all
info
ヒント
delete-all
コマンドを確認します。コマンド名はデフォルトで関数名から生成され、_
が -
に置き換えられます。
テストします。
// Check the command create
$ python main.py create Camila
Creating user: Camila
// Now test the command delete
$ python main.py delete Camila
# Are you sure you want to delete the user? [y/n]: $ y
Deleting user: Camila
$ python main.py delete Wade
# Are you sure you want to delete the user? [y/n]: $ n
Operation cancelled
// And finally, the command delete-all
// Notice it doesn't have CLI arguments, only a CLI option
$ python main.py delete-all
# Are you sure you want to delete ALL users? [y/n]: $ y
Deleting all users
$ python main.py delete-all
# Are you sure you want to delete ALL users? [y/n]: $ n
Operation cancelled
// And if you pass the --force CLI option, it doesn't need to confirm
$ python main.py delete-all --force
Deleting all users
// And init that doesn't take any CLI parameter
$ python main.py init
Initializing user database