Varias líneas en la ayuda de python argparse

Estoy usando argparse en Python2.7 y me gustaría mostrar varias líneas en el texto de ayuda de un argumento.

Mis códigos se ven así:

import argparse parser = argparse.ArgumentParser(description='details', usage='use "%(prog)s --help" for more information') parser.add_argument('--argument', default=None, type=sometype, help=''' First line \n Second line \n \n More lines \n ''') 

Me gustaría imprimir el mensaje de ayuda en varias líneas cuando llame a –help. Sin embargo, la salida se ve como sigue.

 First line Second line More lines 

Sé que podría resolver el problema sumndo las cadenas de cada línea.

 parser.add_argument('--argument', default=None, type=sometype, help='First line \n' + 'Second line \n' + '\n' + 'More lines') 

Pero hay decenas de líneas que quiero agregar al texto de ayuda. Me preguntaba si existe una forma conveniente de dividir el texto de ayuda en varias líneas.

Y también, parece que hay un límite superior del número de caracteres que se pueden mostrar en una línea en el mensaje de ayuda, que es 54 en mi caso. ¿Es este límite dependiente del sistema y hay una manera de boost el límite superior?

El formateador de ayuda predeterminado vuelve a ajustar las líneas para que se ajusten a su terminal (mira la variable de entorno COLUMNS para determinar el ancho de salida, con un valor predeterminado de 80 caracteres en total).

Desde la sección formatter_class :

De forma predeterminada, los objetos ArgumentParser ajustan en línea los textos de descripción y epílogo en los mensajes de ayuda de la línea de comandos.

Use la clase RawTextHelpFormatter lugar para indicar que ya ajustó las líneas:

RawTextHelpFormatter mantiene espacios en blanco para todo tipo de texto de ayuda, incluidas las descripciones de los argumentos.

Para su código que se vería como:

 parser = argparse.ArgumentParser(description='details', usage='use "%(prog)s --help" for more information', formatter_class=argparse.RawTextHelpFormatter) 

Tenga cuidado de no agregar demasiadas líneas nuevas; las cadenas entre comillas triples incluyen las nuevas líneas que deja en la cadena. Como tal, no necesitas los \n caracteres:

 >>> import argparse >>> parser = argparse.ArgumentParser(description='details', ... usage='use "%(prog)s --help" for more information', ... formatter_class=argparse.RawTextHelpFormatter) >>> parser.add_argument('--argument', default=None, ... help=''' ... First line ... Second line ... ... More lines ... ''') _StoreAction(option_strings=['--argument'], dest='argument', nargs=None, const=None, default=None, type=None, choices=None, help='\n First line\n Second line\n\n More lines\n ', metavar=None) >>> parser.print_help() usage: use " --help" for more information details optional arguments: -h, --help show this help message and exit --argument ARGUMENT First line Second line More lines 

Otra forma fácil de hacerlo es incluir textwrap .

Por ejemplo,

 import argparse, textwrap parser = argparse.ArgumentParser(description='Prepare input file', usage='use "python %(prog)s --help" for more information', formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('--argument', default=somedefault, type=sometype, help= textwrap.dedent('''\ First line Second line More lines ... ''')) 

De esta manera, podemos evitar el espacio vacío largo delante de cada línea de salida.

 usage: use "python your_python_program.py --help" for more information Prepare input file optional arguments: -h, --help show this help message and exit --argument ARGUMENT First line Second line More lines ... 

Lo más simple que podrías hacer sería colocar las líneas en una matriz y luego unirlas con nuevas líneas como:

 help_lines = ['First line', 'Second line', '', 'More lines'] # ... parser.add_argument('--argument', default=None, type=sometype, help='\n'.join(help_lines))