Question

J'utilise argparse et je veux afficher une liste dans le texte d'aide d'un de mes options. Cependant, des bandes argparse nouvelles lignes du texte et l'affiche sur une seule ligne.

Y at-il de toute façon de dire argparse que la chaîne d'aide est préformaté, et de ne pas dépouiller de nouveaux caractères ligne?

Était-ce utile?

La solution

De la docs :

  

RawTextHelpFormatter maintient   des espaces pour toutes sortes de texte d'aide   y compris les descriptions des arguments.

from argparse import RawTextHelpFormatter
parser = ArgumentParser(description='test', formatter_class=RawTextHelpFormatter)

Autres conseils

Si vous voulez juste passer outre une option, vous ne pouvez pas utiliser RawTextHelpFormatter. sous-classe au lieu du HelpFormatter et de fournir une intro spéciale pour les options qui doivent être traitées « brut » (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 l'utiliser:

from argparse import ArgumentParser
from textwrap import dedent

parser = ArgumentParser(description='test')

parser.add_argument('--list', help=dedent("""\
    R|abc
      def
        ghi
"""))
parser.parse_args()

Les autres appels à .add_argument() où l'aide ne démarre pas avec R| sera enveloppé comme normal.

Cela fait partie de mes améliorations argparse. Le SmartFormatter complet prend également en charge l'ajout les valeurs par défaut à toutes les options et entrées brutes de la description des services publics.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top