348 votos

¿Python argparse: Cómo insertar salto de línea el texto de ayuda?

Estoy usando argparse en Python 2.7 para analizar las opciones de entrada. Una de mis opciones es una elección múltiple. Quiero hacer una lista en su texto de ayuda, por ejemplo,

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

Sin embargo, argparse tiras de todos los saltos de línea y espacios consecutivos. El resultado parece

~/Descargas:52$ python2.7 x.py-h
uso: x.py [-h] [-g {a,b,g,d,e}]

de prueba

argumentos opcionales:
 -h, --help muestra este mensaje de ayuda y de salida
 -g {a,b,g,d,e} la opción, donde a = alpha b = beta g = gamma d = delta e
 = epsilon

Cómo insertar saltos de línea en el texto de ayuda?

403voto

Michał Kwiatkowski Puntos 2777

Pruebe a utilizar RawTextHelpFormatter :

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

80voto

Anthon Puntos 4119

Si usted sólo desea anular la opción, usted no debe usar RawTextHelpFormatter. En lugar subclase HelpFormatter y proporcionan un especial de introducción de las opciones que deberían ser tratados como "materia prima" (yo uso "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 uso es:

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

Cualquier otro llamadas a .add_argument() , donde la ayuda no se inicia con R| será envuelto como normal.

Esto es parte de mi mejoras en argparse. El pleno SmartFormatter también admite la adición de los valores predeterminados para todas las opciones, y la entrada bruta de las utilidades de la descripción. La versión completa tiene su propia _split_lines método, por lo que cualquier formato de hecho, por ejemplo, las cadenas de versión se conserva:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X