2011-05-11 2 views
6

J'utilise le module optparse pour l'analyse des options/arguments. Pour des raisons de compatibilité ascendante, je ne peux pas utiliser le module argparse. Comment puis-je formater mon message epilog afin de préserver les sauts de ligne?affichage des sauts de ligne dans le message d'aide lors de l'utilisation de optparse de python

Dans l'exemple ci-dessous, j'aimerais que l'épilogue soit imprimé au format.

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

Juste comme une note de côté. Pourquoi ne pouvez-vous pas utiliser argparse? c'est de loin supérieur –

+1

Jakob, est-ce que je pourrais utiliser argparse quand j'utilise python 2.6 et que je veux le partager avec des personnes qui utilisent ou non python 2.7+? – DannyTree

+0

http://pypi.python.org/pypi/argparse/1.2.1 Juste l'inclure localement ^^ –

Répondre

8

Voir la première réponse à:

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

La réponse de base est de sous-classe la OptionParser

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

Merci. C'est exactement ce que je cherchais. – DannyTree

+0

Comment pouvez-vous modifier les messages d'aide associés aux options? Alors cette réponse ne fonctionne pas, car elle ne change que la mise en forme de l'epilog. – HelloGoodbye

+0

Il existe aussi une méthode format_help() qui peut être surchargée. –

1

Vous pouvez décorer la fonction 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) 

Ainsi, vous pouvez avoir une description de l'aide qui fait des choses comme ceci:

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.""" 

Works pour moi. :)

0

Pour ceux d'entre vous qui utilisent la réponse de user227667 mais veulent remplacer %prog dans le Epilogue, vous pouvez utiliser:

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

Mais en général, si possible, ne pas utiliser optparse.

Questions connexes