Python argparse: Preformateado texto de ayuda?
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?
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.