#1 Le 09/05/2015, à 13:50
- melixgaro
[Python] Message d'aide généré par argparse
Bonjour,
Je me suis aperçu d'un comportement étrange (= je ne m'y attendais pas ;-)) de argparse lorsqu'il affiche l'aide d'un programme.
Voilà le cas simple, qui marche :
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
dummy = argparse.ArgumentParser(add_help=True)
grp = dummy.add_argument_group("Colors")
grp.add_argument("--white", action="store_true", default=True)
grp.add_argument("--black", action="store_true", default=True)
grp_excl = grp.add_mutually_exclusive_group()
grp_excl.add_argument("--red", action="store_true", default=True)
grp_excl.add_argument("--green", action="store_true", default=True)
dummy.parse_args()
Si je lance le programme avec l'option -h, j'obtiens
usage: pb_argparse.py [-h] [--white] [--black] [--red | --green]
optional arguments:
-h, --help show this help message and exit
Colors:
--white
--black
--red
--green
Donc on voit que les drapeaux sont bien réunies sous la catégories « Colors » : les deux drapeaux « normaux » (white et black) et les deux drapeaux mutuellement exclusifs (red et green).
Maintenant je veux que le programme accepte plusieurs sous-commandes (ex: « foreground » et « background ») qui ont des drapeaux en commun. Le programme devient
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
dummy = argparse.ArgumentParser(add_help=False)
grp = dummy.add_argument_group("Colors")
grp.add_argument("--white", action="store_true", default=True)
grp.add_argument("--black", action="store_true", default=True)
grp_excl = grp.add_mutually_exclusive_group()
grp_excl.add_argument("--red", action="store_true", default=True)
grp_excl.add_argument("--green", action="store_true", default=True)
dummy2 = argparse.ArgumentParser()
subcommand = dummy2.add_subparsers()
subcommand.add_parser("foreground", parents=[dummy])
dummy2.parse_args()
Si j'affiche l'aide avec
./prog.py -h
j'ai bien
usage: prog.py [-h] {foreground} ...
positional arguments:
{foreground}
optional arguments:
-h, --help show this help message and exit
Mais si je fais
./prog.py foreground -h
j'obtiens
usage: prog.py foreground [-h] [--white] [--black] [--red | --green]
optional arguments:
-h, --help show this help message and exit
--red
--green
Colors:
--white
--black
On voit que les drapeaux mutuellement exclusifs red et green ne sont plus dans le groupe « Colors » mais dans le groupe « optional arguments ».
Ma question : comment faire pour que les drapeaux red et green restent sous la catégorie « Colors » ? Ou avez-vous une meilleure suggestion pour gérer proprement ces histoires de drapeaux communs aux sous-commandes (sans avoir à écrire deux fois le quasi-même bloc d'instruction) ?
Merci d'avance
Linux depuis ~2007. Xubuntu seulement.
Hors ligne