web-dev-qa-db-fra.com

Python Argparse - Comment puis-je ajouter du texte au message d'aide par défaut?

J'utilise argparse de python pour gérer l'analyse des arguments. Je reçois un message d'aide par défaut structuré comme suit:

usage: ProgramName [-h] ...

Description

positional arguments:
  ...

optional arguments:
  -h, --help            show this help message and exit
  ...

Ce que je veux, c'est ajouter une nouvelle section entière à ce message, par exemple:

usage: ProgramName [-h] ...

Description

positional arguments:
  ...

optional arguments:
  -h, --help            show this help message and exit
  ...

additional information:
  This will show additional information relevant to the user.
  ....

Existe-t-il un moyen d'obtenir ce comportement? Une solution prise en charge par les deux python 2.7 et 3.x est préférée.

Edit: je préfère également avoir une solution qui ajoutera la nouvelle section/sections au bas du message d'aide.

11
Yoavhayun

Vous pouvez le faire en utilisant epilog . Voici un exemple ci-dessous:

import argparse
import textwrap
parser = argparse.ArgumentParser(
      prog='ProgramName',
      formatter_class=argparse.RawDescriptionHelpFormatter,
      epilog=textwrap.dedent('''\
         additional information:
             I have indented it
             exactly the way
             I want it
         '''))
parser.add_argument('--foo', nargs='?', help='foo help')
parser.add_argument('bar', nargs='+', help='bar help')
parser.print_help()

Résultat :

usage: ProgramName [-h] [--foo [FOO]] bar [bar ...]

positional arguments:
  bar          bar help

optional arguments:
  -h, --help   show this help message and exit
  --foo [FOO]  foo help

additional information:
    I have indented it
    exactly the way
    I want it
15
dbaxime

Il y a plusieurs façons dont vous pouvez ajouter une description à votre commande. La méthode recommandée consiste à ajouter une documentation de module en haut de votre fichier de code source comme dans:

""" This is the description, it will be accessible within the variable
    __doc__
"""

Puis:

parser = argparse.ArgumentParser(description=__doc__)

Pour ajouter du texte sous la description du paramètre, utilisez epilog, comme illustré dans l'exemple suivant tiré de la documentation:

>>> parser = argparse.ArgumentParser(description='A foo that bars',  
                                     epilog="And that's how you'd foo a bar")
>>> parser.print_help() 

usage: argparse.py [-h]

A foo that bars

optional arguments:  -h, --help  show this help message and exit

And that's how you'd foo a bar

Reportez-vous à la documentation (liée ci-dessus) pour plus d'informations.

7
dangom