Migrating from argparse

nargs

parser.add_argument("--foo", nargs=2)
parser.add_argument("--bar", nargs="?", const="c", default="d")
parser.add_argument("infile", nargs="?", type=argparse.FileType("r"), default=sys.stdin)
parser.add_argument("--baz", nargs="*")
parser.add_argument("--boo", nargs="+")
cmd.flag(long="foo", values=[("A", float), ("B", int)])  # PowerCLI requires hints and converters
# It's not possible to recreate `--bar` 1:1 in PowerCLI
cmd.pos(name="infile", into=lambda filepath: pathlib.Path(filepath).read_bytes(), default=lambda _ctx: sys.stdin.read())
# It's not possible to recreate `--baz` 1:1 in PowerCLI
cmd.flag(long="boo", values[("A", float), ...])  # PowerCLI requires hints and converters

metavar

parser.add_argument("-x", nargs=2, metavar=("bar", "baz"))
cmd.flag(short="x", values=[("bar", str), ("baz", str)])

Mutual exclusion

group1 = parser.add_mutually_exclusive_group()
group1.add_argument('--foo', action='store_true')
group1.add_argument('--bar', action='store_false')

group2 = parser.add_mutually_exclusive_group(required=True)
group2.add_argument('--moo', action='store_true')
group2.add_argument('--meow', action='store_false')
cmd.add_args(
    one_of(
        Flag(long="foo"),
        Flag(long="bar"),
    )
)

cmd.add_args(
    one_of(
        Flag(long="moo"),
        Flag(long="meow"),
    ),
    required=static(True)
)