Я хотел бы иметь аргумент для моей программы, который имеет некоторые обязательные параметры наряду с некоторыми необязательными параметрами. Что-то вроде этого:
[--print text [color [size]]
так что вы можете передать его любой из них:
mycommand --print hello
mycommand --print hello blue
mycommand --print hello red 12
Их может быть несколько, поэтому должен быть один add_argument. Например:
[--print text [color]] [--output filename [overwrite]]
Я могу получить аргументы, близкие к тому, что я хочу:
>>> parser = argparse.ArgumentParser()
>>> act = parser.add_argument('--foo', nargs=3, metavar=('x','y','z'))
>>> act = parser.add_argument('--bar', nargs='?')
>>> act = parser.add_argument('--baz', nargs='*')
>>> parser.print_help()
usage: [-h] [--foo x y z] [--bar [BAR]] [--baz [BAZ [BAZ ...]]]
optional arguments:
-h, --help show this help message and exit
--foo x y z
--bar [BAR]
--baz [BAZ [BAZ ...]]
но не совсем. Есть ли способ сделать это с помощью argparse? Я знаю, что могу сделать их все nargs="*"
, но тогда --help не будет перечислять имена необязательных аргументов. Если я передам nargs="*"
и кортеж для metavar, argparse выдаст исключение.