Я хотел бы иметь аргумент для моей программы, который имеет некоторые обязательные параметры наряду с некоторыми необязательными параметрами. Примерно так:
[--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 выдает исключение.