2010-12-07 14 views
4

J'utilise argparse et je veux afficher une liste dans le texte d'aide de l'une de mes options. Cependant, argparse supprime les nouvelles lignes du texte et les affiche sur une seule ligne. Y at-il moyen de dire à argparse que la chaîne d'aide est préformatée, et de ne pas dépouiller les nouveaux caractères de ligne?Python argparse: texte d'aide préformaté?

+0

dup: http://stackoverflow.com/questions/3853722/python-argparse-how-to-insert-newline-the-help-text? –

Répondre

5

De l'docs:

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

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

est-il un moyen de le faire pour une seule option? ça bousille le mot enveloppant pour les autres – petraus

+0

il suffit de lire le lien de @ barti_ddu. mon commentaire est un dupe aussi. merci – petraus

+2

Oui, cette question a déjà été répondue mais j'ai lu son commentaire après l'avoir posté et j'ai donc pensé à le laisser rester :) – user225312

3

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 de 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() 

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

Ceci fait partie de my improvements on argparse. Le SmartFormatter complet prend également en charge l'ajout de les valeurs par défaut à toutes les options, et l'entrée brute de la description des utilitaires.