複数 CLI オプション
複数回使用できる「CLI オプション
」を宣言し、すべての値を取得できます。
例えば、1 つの実行で複数のユーザーを受け入れるとします。
それには、標準 Python の typing.List
を使用して str
の list
として宣言します。
from typing import List, Optional
import typer
from typing_extensions import Annotated
def main(user: Annotated[Optional[List[str]], typer.Option()] = None):
if not user:
print(f"No provided users (raw input = {user})")
raise typer.Abort()
for u in user:
print(f"Processing user: {u}")
if __name__ == "__main__":
typer.run(main)
ヒント
可能であれば Annotated
バージョンを使用することをお勧めします。
from typing import List, Optional
import typer
def main(user: Optional[List[str]] = typer.Option(None)):
if not user:
print(f"No provided users (raw input = {user})")
raise typer.Abort()
for u in user:
print(f"Processing user: {u}")
if __name__ == "__main__":
typer.run(main)
宣言した str
の list
として定義どおりの値を受け取ります。
チェックします。
// The default value is 'None'
$ python main.py
No provided users (raw input = None)
Aborted!
// Now pass a user
$ python main.py --user Camila
Processing user: Camila
// And now try with several users
$ python main.py --user Camila --user Rick --user Morty
Processing user: Camila
Processing user: Rick
Processing user: Morty
複数の float
¶
同様に、他の型を使用でき、Typer によって宣言された型に変換されます。
from typing import List
import typer
from typing_extensions import Annotated
def main(number: Annotated[List[float], typer.Option()] = []):
print(f"The sum is {sum(number)}")
if __name__ == "__main__":
typer.run(main)
ヒント
可能であれば Annotated
バージョンを使用することをお勧めします。
from typing import List
import typer
def main(number: List[float] = typer.Option([])):
print(f"The sum is {sum(number)}")
if __name__ == "__main__":
typer.run(main)
チェックします。
$ python main.py
The sum is 0
// Try with some numbers
$ python main.py --number 2
The sum is 2.0
// Try with some numbers
$ python main.py --number 2 --number 3 --number 4.5
The sum is 9.5