496 votes

Argparse Python : comment insérer la nouvelle ligne le texte d’aide ?

Je suis à l'aide d' argparse dans Python 2.7 pour l'analyse des options de saisie. L'une de mes options est un questionnaire à choix multiples. Je veux faire une liste dans son texte d'aide, par exemple

from argparse import ArgumentParser

parser = ArgumentParser(description='test')

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

Toutefois, argparse bandes tous les retours à la ligne et les espaces consécutifs. Le résultat ressemble à

~/Téléchargements:52$ python2.7.x.py -h
utilisation: x.py [-h] [-g {a,b,g,d,e}]

test

les arguments optionnels:
 -h, --help affiche ce message d'aide et quitte
 -g {a,b,g,d,e} une option, où a = alpha b = bêta g = gamma d = delta e
 = epsilon

Comment insérer des sauts de ligne dans le texte de l'aide?

579voto

Michał Kwiatkowski Points 2777

Essayez d’utiliser `` :

103voto

Anthon Points 4119

Si vous voulez juste pour remplacer celui de l'option, vous ne devez pas utiliser RawTextHelpFormatter. Au lieu de sous-classe HelpFormatter et de fournir une intro spéciale pour les options qui doivent être manipulés "raw" (j'utilise "R|rest of help"):

import argparse

class SmartFormatter(argparse.HelpFormatter):

    def _split_lines(self, text, width):
        # this is the RawTextHelpFormatter._split_lines
        if text.startswith('R|'):
            return text[2:].splitlines()  
        return argparse.HelpFormatter._split_lines(self, text, width)

Et de l'utiliser:

from argparse import ArgumentParser

parser = ArgumentParser(description='test', formatter_class=SmartFormatter)

parser.add_argument('-g', choices=['a', 'b', 'g', 'd', 'e'], default='a',
    help="R|Some option, where\n"
         " a = alpha\n"
         " b = beta\n"
         " g = gamma\n"
         " d = delta\n"
         " e = epsilon")

parser.parse_args()

Tous les autres appels d' .add_argument() où l'aide ne démarre pas avec l' R| sera enveloppé comme d'habitude.

Cela fait partie de mon améliorations sur argparse. La pleine SmartFormatter prend également en charge l'ajout de les valeurs par défaut pour toutes les options, et des matières premières d'entrée des services publics de la description. La version complète a sa propre _split_lines méthode, de sorte que tout formatage effectué, par exemple les chaînes de version est conservée:

parser.add_argument('--version', '-v', action="version",
                    version="version...\n   42!")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X