単一または複数のコマンド
最初の例のように、単一のコマンドを作成すると、気が付いたかもしれません。
import typer
app = typer.Typer()
@app.command()
def main(name: str):
print(f"Hello {name}")
if __name__ == "__main__":
app()
Typer は、その単一の関数をコマンド/サブコマンドとしてではなく、メインのCLIアプリケーションとして持つCLIアプリケーションを作成するのに十分賢いです。
// Without a CLI argument
$ python main.py
Usage: main.py [OPTIONS] NAME
Try "main.py --help" for help.
Error: Missing argument 'NAME'.
// With the NAME CLI argument
$ python main.py Camila
Hello Camila
// Asking for help
$ python main.py
Usage: main.py [OPTIONS] NAME
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.
ヒント
関数名が main
であっても、コマンド main
が表示されないことに注目してください。
しかし、複数のコマンドを追加すると、Typer はそれぞれのコマンドに対して1つのCLIコマンドを作成します。
import typer
app = typer.Typer()
@app.command()
def create():
print("Creating user: Hiro Hamada")
@app.command()
def delete():
print("Deleting user: Hiro Hamada")
if __name__ == "__main__":
app()
ここでは、2つのコマンド create
と delete
があります。
// 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
// Test the commands
$ python main.py create
Creating user: Hiro Hamada
$ python main.py delete
Deleting user: Hiro Hamada
単一のコマンドと単一のコールバック¶
単一のコマンドを持つCLIアプリを作成したいが、それでもコマンド/サブコマンドにしたい場合は、コールバックを追加するだけで済みます。
import typer
app = typer.Typer()
@app.command()
def create():
print("Creating user: Hiro Hamada")
@app.callback()
def callback():
pass
if __name__ == "__main__":
app()
これで、CLIプログラムは単一のコマンドを持つようになります。
確認してください。
// Check the help
$ python main.py --help
// Notice the single command create
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
// Try it
$ python main.py create
Creating user: Hiro Hamada
ドキュメントを作成するためのコールバックの使用¶
単一のコマンドを持つためだけにコールバックを使用しているので、アプリのドキュメントを追加するためにそれを使用することもできます。
import typer
app = typer.Typer()
@app.command()
def create():
print("Creating user: Hiro Hamada")
@app.callback()
def callback():
"""
Creates a single user Hiro Hamada.
In the next version it will create 5 users more.
"""
if __name__ == "__main__":
app()
これで、コールバックからのドキュメンテーション文字列がヘルプテキストとして使用されます。
$ python main.py --help
// Notice the help text from the docstring
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Creates a single user Hiro Hamada.
In the next version it will create 5 users more.
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
// And it still works the same, the callback does nothing
$ python main.py create
Creating user: Hiro Hamada