optparse und OptionGroup

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
lunar

Ich schreibe gerade ein kleines Kommandozeilen-Programm. Das Programm kennt globale Optionen und zusätzlich auch noch eine Gruppe exklusiver Optionen. Zum Parsen der Optionen habe ich das optparse Module verwendet. Das Problem war nun, dass die Klasse OptionParser bei der Ausgabe der Hilfe (--help) immer globale Optionen und exklusive Optionen durcheinandergewürfelt hat, was nicht zur Übersicht beitrug ;)

Zuerst wollte ich OptionParser überschreiben, um das Verhalten zu ändern. Dafür habe ich mir dem Quelltext des optparse Moduls angeschaut. Dabei ergab sich aber eine viel einfachere Lösung. Statt alle Optionen direkt zur OptionParser Instanz hinzuzufügen, erstellt man einfach eine OptionGroup:

Code: Alles auswählen

command_options = [
            # exklusive Optionen ... 
    ]

global_options = [
            # globale Optionen ...
    ]

parser = OptionParser(usage=self.usage,
                      description=self.description,
                      version=__version__,
                      option_class=CommandOption,
                      option_list=global_options)

description = _('Commands to modify the phone book and to search '
                'or print entries.\n'
                'Only one of these options may be specified.')
group = parser.add_option_group(_('Commands'),
                                description=description)
group.add_options(command_options)
Schon funktioniert alles. Man kann so die Optionen schön nach ihrem Zweck aufteilen.
Die große Frage ist nur: Warum zur Hölle schweigt sich die Dokumentation über dieses Feature komplett aus? :shock: Da steht nicht das kleinste Wort darüber drinnen. Weiß jemand was darüber?
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Wenn's wirklich nicht in der Doku steht, wuerde ich einen Bug filen oder (noch besser) die Doku schreiben und einen Patch submitten.
lunar

lumax hat geschrieben:Wenn's wirklich nicht in der Doku steht, wuerde ich einen Bug filen oder (noch besser) die Doku schreiben und einen Patch submitten.
Klar kann ich das machen, die Frage ist aber doch: Wenn vergisst das zu dokumentieren, steht dann eine Absicht dahinter?

Zumal für diese Features auch nirgendwo docstrings zu sehen sind. Vielleicht gibt es ja einen triftigen Grund (z.B gravierende Bugs), diese Dinge zu verbergen. Das interessiert mich...
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

lunar hat geschrieben:Zumal für diese Features auch nirgendwo docstrings zu sehen sind. Vielleicht gibt es ja einen triftigen Grund (z.B gravierende Bugs), diese Dinge zu verbergen. Das interessiert mich...
Ich bezweifle, dass Software mit gravierenden Bugs in die Stdlib kommen wuerde. Und selbst, wenn das der Fall waere - dann sollte man die Bugs eher dokumentieren als zu versuchen, sie totzuschweigen.

Ansonsten ist die beste Anlaufstelle fuer derartige Fragen vermutlich direkt der Bugtracker von Python oder Optik.
lunar

lumax hat geschrieben:
lunar hat geschrieben:Zumal für diese Features auch nirgendwo docstrings zu sehen sind. Vielleicht gibt es ja einen triftigen Grund (z.B gravierende Bugs), diese Dinge zu verbergen. Das interessiert mich...
Ich bezweifle, dass Software mit gravierenden Bugs in die Stdlib kommen wuerde. Und selbst, wenn das der Fall waere - dann sollte man die Bugs eher dokumentieren als zu versuchen, sie totzuschweigen.
Stimmt auch wieder ... ;)
lumax hat geschrieben: Ansonsten ist die beste Anlaufstelle fuer derartige Fragen vermutlich direkt der Bugtracker von Python oder Optik.
Ich habe auf der Python-Seite mal einen Bug "submitted"
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Vielen Dank! Wäre wirklich schön, wenn sich dies in der Doku wiederfinden würde!

Gruß,
Christian
lunar

Ach ja, hab ich vergessen: die URL zum Bug-Report (wenn jemand Kommentare hinzufügen will)

http://sourceforge.net/tracker/index.ph ... tid=105470
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Interessant. Optionsgruppen waren mir auf jeden Fall bekannt, aber jetzt wo du's sagst finde ich weder in den Python-Docs noch denen von Optik etwas darüber (übrigens tauchen auch bspw. `OptionParser` und `add_option`nicht im Index auf, in dem sich über .chm-Viewer suchen lässt). Da hab ich das wohl auch beim Wühlen im Quellcode des Moduls gefunden.
Antworten