Argparse: façon d'inclure les valeurs par défaut dans '--help'?
supposons que j'ai 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
retourne:
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)
regarder le code de formatteur d'aide a révélé des options limitées. Est-ce qu'il y a une façon intelligente d'obtenir argparse
pour imprimer la valeur par défaut pour --scan-time
d'une manière similaire, ou devrais-je simplement sous-classe le formatage help
?
4 réponses
utiliser le argparse.ArgumentDefaultsHelpFormatter
formater :
parser = argparse.ArgumentParser(
# ... other options ...
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
pour citer la documentation:
l'autre classe de formatteur disponible,
ArgumentDefaultsHelpFormatter
, ajoutera des informations sur la valeur par défaut de chacun des arguments.
notez que ceci ne s'applique qu'aux arguments dont le texte d'aide définit ; sans valeur help
pour un argument, il est à noter d'ajouter les informations à .
la sortie exacte de votre option scan-time devient alors:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(default: 5)
ajouter '%(default)'
au paramètre d'aide pour contrôler ce qui est affiché.
parser.add_argument("--type", default="toto", choices=["toto","titi"],
help = "type (default: %(default)s)")
ArgumentDefaultsHelpFormatter
+ RawTextHelpFormatter
héritage multiple
l'héritage Multiple fonctionne, tout simplement, bien qu'il ne semble pas être une API publique:
#!/usr/bin/env python3
import argparse
import sys
class RawTextArgumentDefaultsHelpFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawTextHelpFormatter): pass
parser = argparse.ArgumentParser(formatter_class=RawTextArgumentDefaultsHelpFormatter)
parser.add_argument('-a', default=13, help="""my help
for a""")
parser.add_argument('-b', default=42, help="""my help
for b""")
parser.print_help()
sortie:
usage: a.py [-h] [-a A] [-b B]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a (default: 13)
-b B my help
for b (default: 42)
il fonctionne tout simplement parce que comme nous pouvons le voir trivialement à partir des sources https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 that:
-
RawTextHelpFormatter
instruments_split_lines
-
ArgumentDefaultsHelpFormatter
instruments_get_help_string
donc nous pouvons deviner qu'ils vont travailler ensemble très bien.
Toutefois, cela ne semble pas être une API publique, et ne sont ni les méthodes de la formatter_class
, donc je ne pense pas qu'il y est une API publique manière de le faire actuellement. argparse
docstring dit:
toutes les autres classes ce module est considéré comme détails de mise en œuvre. (Notez également que HelpFormatter et RawDescriptionHelpFormatter ne sont considéré public en tant que noms d'objets -- L'API des objets formatter est toujours considéré comme un détail d'implémentation.)
Voir aussi: personnaliser le message d'aide argparse
testé sur Python 3.6.5.
il n'y a pas de default
pour le Optparser
en python.
Cependant, vous pouvez utiliser le suivant -
# show help as default
if len(sys.argv) == 1:
os.system("python " + sys.argv[0] + " -h")
exit()
cette commande exécutera le même script avec l'option -h
, et exit
.
S'il vous plaît noter - vous aurez besoin de import os, sys
modules pour utiliser cette option.