Python argparse необязательные подаргументы

Я хотел бы иметь аргумент для моей программы, который имеет некоторые обязательные параметры наряду с некоторыми необязательными параметрами. Примерно так:

[--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 выдает исключение.

10
задан jterrace 10 March 2011 в 09:00
поделиться