Pregunta

Estoy usando argparse y quiero mostrar una lista en el texto de ayuda de uno de mis opciones. Sin embargo, argparse tiras nuevas líneas del texto y lo muestra en una sola línea.

¿Hay alguna forma de decir argparse que la cadena de ayuda está preformateado, y de no dañar los nuevos caracteres de línea?

¿Fue útil?

Solución

Desde el docs :

RawTextHelpFormatter mantiene espacio en blanco para todo tipo de texto de ayuda incluyendo descripciones de los argumentos.

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

Otros consejos

Si lo que desea es anular la opción, no se puede utilizar RawTextHelpFormatter. En lugar subclase el HelpFormatter y proporcionar una introducción especial para las opciones que deben ser manejadas "en bruto" (utilizo "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)

Y utilizarlo:

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

Las demás llamadas a .add_argument() donde la ayuda no se inicia con R| será envuelto con normalidad.

Esto es parte de mis mejoras en argparse . El SmartFormatter completo también admite la adición los valores por defecto a todas las opciones, y la entrada bruta de la descripción utilidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top