OptionParser -h Ausgabe verändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Montag 23. Oktober 2006, 11:45

Hallo zuammen. Ich habe mir mal meine erstes Kommandozeilenscript mit OptionParser zusammengestrickt.
Es funktioniert auch alles soweit sehr gut, aber hätte eine Frage zu der Help-Ausgabe.

Codeausschnitt:

Code: Alles auswählen

...
from optparse import OptionParser
...
parser.add_option("-m", "--memAddr", type="string", dest="memAddr",
                   help="memAddr as hexStr default=0x40000", default="0x40000")
parser.add_option("-e","--entryPoint", type="string", dest="entryPoint",
                   help="entryPoint as hexStr default=0x40040",default="0x40040" )
...

Beim skriptaufruf mit -h erhalte ich folgende usage-message:

Code: Alles auswählen

...
options:
  -h, --help            show this help message and exit
  -mMEMADDR, --memAddr=MEMADDR
                        memAddr as hexStr default=0x40000
  -eENTRYPOINT, --entryPoint=ENTRYPOINT
                        entryPoint as hexStr default=0x40040
...
Jetzt ist meine Frage: Gibt es eine Möglichtkeit die Variablennamen (MEMADDR und ENTRYPOINT ) auszublenden? Ich empfinde das als leichten Overhead und würde gerne nur die Optionskürzel -m --memAddr usw + meinem Helptext ausgeben.
Hab mich durch die doc-strings und python.org gewühlt aber leider nichts gefunden.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 23. Oktober 2006, 11:59

Zap hat geschrieben:Jetzt ist meine Frage: Gibt es eine Möglichtkeit die Variablennamen (MEMADDR und ENTRYPOINT ) auszublenden?
Hi Zap!

Mit dem Parameter ``metavar`` kannst du den Variablennamen beeinflussen. Mein Tipp: Mach ihn kürzer, aber weglassen würde ich ihn nicht.

``metavar="MEM"``
``metavar="ENTRY"``

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 23. Oktober 2006, 12:03

Es gibt Optionen, um die Meta-Variable(?) selbst zu benennen; vielleicht tut da auch ein leerer String. Ansonsten ist hier wieder mal "explicit is better than implicit" zum Einsatz gekommen; ich bezweifle, dass jemand die Hilfe durch die zusätzlichen Variablennamen (die einem guten Beispiel nahekommen, das aber nie in --help vorkommt) schlechter versteht, eher im Gegenteil. Das bisschen Mehraufwand beim (einmaligen) Lesen ist gut investiert, denke ich.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Montag 23. Oktober 2006, 12:15

Dank an euch zwei für die schnelle Antwort.
Das umbennen reicht schon aus...

@ gerold: Habe deinen Tipp entsprechend die VarNamen angepasst, damit die Formatierung nicht mehr ganz so aus allen Nähten platzt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Dienstag 30. Januar 2007, 12:34

Ich hatte das Problem auch mal... ich wollte allerdings meine Konsolenausgabe nicht nur ein wenig formatieren sondern auch Farbe reinbringen. Ich habe dazu bei 'pocoo' in der 'console.py' etwas wunderschönes gefunden... dies habe ich versucht in die '-h' Ausgabe von 'optparse' einbauen.

Allein mit den gegebenen Sachen war es nicht so einfach.

Ich habe mir einfach mal den Quelltext von optparse angeschaut und die Klassen entdekt, die für die Ausgabe verantwortlich sind.

Es gibt u.A. die Klasse 'TitledHelpFormatter', wenn ich mich net irre. Und noch eine andere. Auf basis dieser habe ich mir meine eigene Klasse gebastelt und sie direkt mit eingebaut.

Code: Alles auswählen

parser = OptionParser(formatter=SelfDefinedFormatter())
Um dir Arbeit zu sparen, lasse deinen Formatter von der Klasse 'optparse.HelpFormatter' erben. genauso machen es die Beispiele auch.

ansonsten siehe Mein Beispiel

Ist mir nur gerade so mal eingefallen ;) also sollte es etwas mehr formatiert sein, als optparse es bringt... ist das ne gute Idee :)


MfG EnTeQuAk
Antworten