2011-05-11 14 views
6

Estoy usando el módulo optparse para el análisis de opción/argumento. Por razones de compatibilidad con versiones anteriores, no puedo usar el módulo argparse. ¿Cómo puedo formatear mi mensaje epilog para preservar las nuevas líneas?mostrando líneas nuevas en el mensaje de ayuda cuando se utiliza la opción de Python

En el siguiente ejemplo, me gustaría que el epilog se imprima como formateado.

epi = \ 
""" 
Examples usages: 
    Do something 
    %prog -a -b foo 
    Do something else 
    %prog -d -f -h bar 
""" 
    parser = optparse.OptionParser(epilog=epi) 
+0

Solo como una nota al margen. ¿Por qué no puedes usar argparse? su muy superior –

+1

Jakob, hay una manera que podría utilizar argparse cuando estoy usando Python 2.6 y quieres compartirlo con las personas que pueden o no estar usando Python 2.7+? – DannyTree

+0

http://pypi.python.org/pypi/argparse/1.2.1 Solo inclúyalo localmente ^^ –

Respuesta

8

Ver la primera respuesta en:

python optparse, how to include additional info in usage output?

La respuesta básica es a subclase el OptionParser

class MyParser(optparse.OptionParser): 
    def format_epilog(self, formatter): 
     return self.epilog 
+0

Gracias. Eso es exactamente lo que estaba buscando. – DannyTree

+0

¿Cómo puede modificar los mensajes de ayuda asociados con las opciones? Entonces esta respuesta no funciona, ya que solo cambia el formato del epilog. – HelloGoodbye

+0

Hay un método format_help() que también se puede anular. –

1

Usted puede decorar la función optparse.HelpFormatter.format_description:

from optparse import HelpFormatter as fmt 
def decorate(fn): 
    def wrapped(self=None, desc=""): 
     return '\n'.join([ fn(self, s).rstrip() for s in desc.split('\n') ]) 
    return wrapped 
fmt.format_description = decorate(fmt.format_description) 

Por lo tanto, se puede tener una descripción de ayuda que hace cosas como esta:

my_desc = """This is some text 
that wraps to some more stuff.\n 
\n 
And this is a new paragraph.\n 
\n 
This line comes before\n 
this line but not in a different paragraph.""" 

funciona para mí. :)

0

Para aquellos de ustedes que están usando la respuesta de user227667 pero desea reemplazar %prog en el epílogo, es posible utilizar:

class MyParser(optparse.OptionParser): 
    def format_epilog(self, formatter): 
     return self.expand_prog_name(self.epilog) 

Pero, en general, a ser posible, no utilice optparse.

Cuestiones relacionadas