必須CLIオプション
前に述べたように、*デフォルトでは*
- CLIオプションは任意です
- CLI引数は必須です
多くのCLIプログラムやシステムでは、*デフォルト*でこのように動作し、これが慣例です。
しかし、どうしても変更したい場合は可能です。
CLIオプションを必須にするには、Annotated
の中にtyper.Option()
を配置し、パラメータにデフォルト値を指定しません。
--lastname
を必須のCLIオプションにしましょう
import typer
from typing_extensions import Annotated
def main(name: str, lastname: Annotated[str, typer.Option()]):
print(f"Hello {name} {lastname}")
if __name__ == "__main__":
typer.run(main)
typer.Argument()
と同様に、関数パラメータのデフォルト値を使用する従来の方法もサポートされています。その場合は、default
パラメータに何も渡しません。
import typer
def main(name: str, lastname: str = typer.Option()):
print(f"Hello {name} {lastname}")
if __name__ == "__main__":
typer.run(main)
または、typer.Option(default=...)
に...
を明示的に渡すことができます。
import typer
def main(name: str, lastname: str = typer.Option(default=...)):
print(f"Hello {name} {lastname}")
if __name__ == "__main__":
typer.run(main)
情報
もし...
を今まで見たことがないなら、それは特別な単一の値であり、Pythonの一部であり、「Ellipsis」と呼ばれています。
これにより、TyperはそれがCLIオプションであることを認識しますが、デフォルト値を持たず、必須になります。
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。そうすることで、標準PythonとTyperでコードの意味が同じになります。
そしてテストしましょう
// Pass the NAME CLI argument
$ python main.py Camila
// We didn't pass the now required --lastname CLI option
Usage: main.py [OPTIONS] NAME
Try "main.py --help" for help.
Error: Missing option '--lastname'.
// Now update it to pass the required --lastname CLI option
$ python main.py Camila --lastname Gutiérrez
Hello Camila Gutiérrez
// And if you check the help
$ python main.py --help
Usage: main.py [OPTIONS] NAME
Options:
--lastname TEXT [required]
--help Show this message and exit.
// It now tells you that --lastname is required 🎉