optparse: Wie geht das mit den OptionGroups?
Hallo, allerseits, ich habe ein paar Kommandozeilentools geschrieben, die das optparse-Modul verwenden. Nun haben sich die Optionen (viele optionale...) so stark vermehrt, daß eine Gruppierung angebracht scheint. Nach einiger Sucherei und stochern im Nebel: Kann mich jemand erleuchten, wie das funktionieren soll? Der Source des Moduls ist ja recht undurchsichtig... Schönen Dank auch! Tobias _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Tuesday, 23. August 2005 16:47 schrieb Tobias Herp:
ich habe ein paar Kommandozeilentools geschrieben, die das optparse-Modul verwenden. Nun haben sich die Optionen (viele optionale...) so stark vermehrt, daß eine Gruppierung angebracht scheint. Nach einiger Sucherei und stochern im Nebel: Kann mich jemand erleuchten, wie das funktionieren soll? Der Source des Moduls ist ja recht undurchsichtig...
Ausser diesem Link hab' ich nix gefunden - und auch selber keine Erfahrungen gemacht (bisher hauptsaechlich getopt verwendet...) http://groups.google.com/group/comp.lang.python/browse_frm/thread/e9400e3c795c5e13/39cb9d2d4b3c42c4?lnk=st&q=OptionGroup+optparse&rnum=1&hl=en#39cb9d2d4b3c42c4 Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch schrieb:
Ausser diesem Link hab' ich nix gefunden - und auch selber keine Erfahrungen gemacht (bisher hauptsaechlich getopt verwendet...)
Danke, der ist schonmal ziemlich gut! Das Procedere sieht also in etwa so aus: from optparse import OptionParser, OptionGroup parser=OptionParser(..., version=...) group=OptionGroup(parser, 'Beschreibung ohne Doppelpunkt') group.add_option(...) ... parser.add_option_group(group) ... (options, args) = parser.parse_args() Bleibt nur noch die Frage, wie ich die Optionen für Hilfe und Versionsausgabe in eine Gruppe kriege -- diese allerlangweiligsten weil immer vorhandenen Optionen werden bislang ausgerechnet am Anfang ausgegeben... Tobias _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Dienstag, 23. August 2005 16:47 schrieb Tobias Herp:
ich habe ein paar Kommandozeilentools geschrieben, die das optparse-Modul verwenden. Nun haben sich die Optionen (viele optionale...) so stark vermehrt, daß eine Gruppierung angebracht scheint. Nach einiger Sucherei und stochern im Nebel: Kann mich jemand erleuchten, wie das funktionieren soll? Der Source des Moduls ist ja recht undurchsichtig...
Nach meinem ersten Eindruck (gerade mal in den Quelltext geschaut) dienen OptionGroup-s allein der Gliederung des Hilfe-Texts: <code> import optparse parser = optparse.OptionParser() # no group parser.add_option("-n") alpha = parser.add_option_group("alpha", "Eine Gruppe") for opt in "-a", "-b", "-c": alpha.add_option(opt) group = parser.add_option_group("beta", "Und noch eine") for opt in "-x", "-y": group.add_option(opt) parser.parse_args(["-h"]) </code> <ausgabe> options: -h, --help show this help message and exit -n N alpha: Eine Gruppe -a A -b B -c C beta: Und noch eine -x X -y Y </ausgabe> Naja... Peter _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Peter Otten schrieb:
Nach meinem ersten Eindruck (gerade mal in den Quelltext geschaut) dienen OptionGroup-s allein der Gliederung des Hilfe-Texts:
Ja, genau. Von einer langen Optionsliste wird man weniger erschlagen, wenn sie gruppiert ist. Die Implementierung ist lediglich insofern hakelig als sie es nicht ermöglicht, die nicht gruppierten Optionen (z. B. --version und --help, die implizit vorhanden sind) ans Ende zu stellen. Oder irre ich mich da? Tobias _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
"Tobias" == Tobias Herp <zopista@tobias-herp.de> writes:
[...] Tobias> Die Implementierung ist lediglich insofern hakelig als sie Tobias> es nicht ermöglicht, die nicht gruppierten Optionen (z. Tobias> B. --version und --help, die implizit vorhanden sind) ans Tobias> Ende zu stellen. Oder irre ich mich da? Hm. Ich habe im quelltext nix Explizites gefunden, aber Du kannst das relativ einfach so hinkriegen: ,----[ Beispiel.py ] | from optparse import OptionParser, STD_HELP_OPTION, STD_VERSION_OPTION | | parser = OptionParser(add_help_option=False) # keine Version angeben! | | ... # Optionen hinzufuegen wie ueblich | | parser.version = "<versions text wie sonst auch>" | parser.add_option(STD_VERSION_OPTION) | parser.add_option(STD_HELP_OPTION) | | (options, restargs) = parser.parse_args() `---- Holger _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hier nun mein vollständiges Rezept, nachdem mich Holger überzeugt hat, daß es anders nicht geht: <snip> from optparse import OptionParser, OptionGroup parser=OptionParser(..., add_help_option=False) group=OptionGroup(parser, 'Beschreibung ohne Doppelpunkt') group.add_option(...) ... parser.add_option_group(group) ... group=OptionGroup(parser, 'the usual suspects') group.add_option('--help', '-h', # und, nach Laune, auch '-?' action='help', help='show this help message and exit') parser.version="%prog x.y" group.add_option('--version', action='version', help='show version info and exit') (options, args) = parser.parse_args() </snip> Es gibt auch zwei Methoden _add_help_option und _add_version_option; die gehören aber leider nur zum OptionParser, nicht zur OptionGroup. Und wenn die beiden Optionen als einzige nicht in Gruppen gesteckt werden, landen sie wieder am Anfang der Ausgabe - was ja vermieden werden sollte... Danke an alle, die geholfen haben! Tobias _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (4)
-
Diez B. Roggisch
-
Holger Duerer
-
Peter Otten
-
Tobias Herp