Seite 1 von 1

optparse und OptionGroup

Verfasst: Mittwoch 21. Februar 2007, 15:48
von 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?

Verfasst: Mittwoch 21. Februar 2007, 16:10
von mq
Wenn's wirklich nicht in der Doku steht, wuerde ich einen Bug filen oder (noch besser) die Doku schreiben und einen Patch submitten.

Verfasst: Mittwoch 21. Februar 2007, 16:20
von 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...

Verfasst: Mittwoch 21. Februar 2007, 16:33
von mq
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.

Verfasst: Mittwoch 21. Februar 2007, 16:41
von 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"

Verfasst: Freitag 23. Februar 2007, 09:27
von CM
Vielen Dank! Wäre wirklich schön, wenn sich dies in der Doku wiederfinden würde!

Gruß,
Christian

Verfasst: Freitag 23. Februar 2007, 10:08
von 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

Verfasst: Freitag 23. Februar 2007, 10:39
von Y0Gi
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.