Supposons que j'aie l'extrait d'argparse suivant:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Actuellement, --help
renvoie:
usage: connection_check.py [-h]
[--version] [--scan-time [SCAN_TIME]]
Test the reliability/uptime of a connection.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
Je préférerais quelque chose comme:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Jetant un coup d'œil au code du formateur d'aide a révélé des options limitées. Existe-t-il un moyen intelligent argparse
d'imprimer la valeur par défaut d' --scan-time
une manière similaire, ou dois-je simplement sous- help
classer le formateur?
Réponses:
Utilisez le
argparse.ArgumentDefaultsHelpFormatter
formateur :Pour citer la documentation:
Notez que cela s'applique uniquement aux arguments dont le texte d'aide est défini ; sans
help
valeur pour un argument, il n'y a pas de message d'aide pour ajouter des informations sur la valeur par défaut à .La sortie exacte de votre option de temps de numérisation devient alors:
la source
default=
affichent la valeur par défaut? Puisque je n'aime pas les textes «par défaut: Aucun».default
àSUPPRESS
:default=argparse.SUPPRESS
. Notez que dans ce cas, aucun attribut ne sera ajouté au résultat de l'espace de noms si cet argument a été omis, consultez ladefault
documentation .help
argumentadd_argument
et cela devrait fonctionner.Ajoutez
'%(default)s'
au paramètre d'aide pour contrôler ce qui est affiché.la source
Classe Wrapper
C'est l'approche la plus fiable et la plus sèche que j'ai trouvée jusqu'à présent pour à la fois afficher les valeurs par défaut et utiliser un autre formateur comme en
argparse.RawTextHelpFormatter
même temps:Production:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
héritage multipleL'héritage multiple fonctionne, mais il ne semble pas être une API publique:
Production:
Cela fonctionne, cela fonctionne parce que, comme nous pouvons le voir trivialement à partir des sources https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648, cela:
RawTextHelpFormatter
met en oeuvre_split_lines
ArgumentDefaultsHelpFormatter
met en oeuvre_get_help_string
nous pouvons donc deviner qu'ils fonctionneront très bien ensemble.
Cependant, cela ne semble pas être une API publique, et les méthodes ne le sont pas non plus
formatter_class
, donc je ne pense pas qu'il existe actuellement une méthode API publique pour le faire.argparse
docstring dit:Voir aussi: Personnaliser le message d'aide argparse
Testé sur Python 3.6.5.
la source