Python argparse option de sous-arguments

J'aimerais avoir un argument à mon programme qui a certains paramètres requis ainsi que certains paramètres facultatifs. Quelque chose comme ceci:

[--print text [color [size]]

de sorte que vous pourriez passer un de ces:

mycommand --print hello
mycommand --print hello blue
mycommand --print hello red 12

Il pourrait y avoir plusieurs de ces il doit être en une seule add_argument. Par exemple:

[--print text [color]] [--output filename [overwrite]]

Je peux réaliser des arguments qui sont proches de ce que je veux:

>>> 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 ...]]

mais pas tout à fait. Est-il possible de faire cela avec argparse? Je sais que je pourrais faire d'eux tous, nargs="*" mais alors, l'aide ne serait pas de la liste les noms des arguments optionnels. Si je passe nargs="*" et d'un n-uplet pour metavar, argparse déclenche une exception.

OriginalL'auteur jterrace | 2011-03-10