How to implement a optional last arguments for a command with Typer in Python?

48 Views Asked by At

How do I achieve the syntax similar to

my_app --named_arg1=val1 -- misc_arg1 misc_arg2 ...

or the same without --?

1

There are 1 best solutions below

0
Kinuax On

A solution with 3.9+ code is:

from typing import Annotated

import typer


def main(
    named_arg1: Annotated[str, typer.Option("--named_arg1")],
    misc_args: Annotated[list[str], typer.Argument()] = None,
):
    for misc_arg in misc_args or []:
        print(misc_arg)


if __name__ == "__main__":
    typer.run(main)

Then we can support the following commands:

python my_app.py --named_arg1=val1
python my_app.py --named_arg1=val1 misc_arg1
python my_app.py --named_arg1=val1 misc_arg1 misc_arg2
python my_app.py --named_arg1=val1 misc_arg1 misc_arg2 ...