Argparse Help formatieren

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
neonfly
User
Beiträge: 5
Registriert: Montag 19. Juli 2010, 08:26

Hallo,

Ich arbeite zur Zeit an einem sehr umfangreichen Skript, welches viele Funktionen bietet. Die Funktionen kann man mit sub-commands bestimmen.
Beispiel:

Code: Alles auswählen

$> myscript.py download file.xml
$> myscript.py upload file.xml
$> myscript.py list short
Das ganze parsing der Argumente habe ich jetzt mit Argparse gelöst. Das klappt auch ziemlich gut. Jedoch wird die Hilfe von den Sub-parsern ('download', 'upload', ...) ziemlich unschön ausgegeben.
Beispiel:

Code: Alles auswählen

$> myscript.py --help
...
optional arguments:
    -h, --help               show this help message and exit

sub-commands:
    { download, upload, list }
Ich hätte jetzt aber gern die sub-commands anders aufgelistet mit description.
Ungefähr so:

Code: Alles auswählen

$> myscript.py --help
...
optional arguments:
    -h, --help            show this help message and exit

sub-commands:
    download              description of download
    upload                description of upload
    list                  description of list
Weiß jemand wie ich da ran gehen muss, um die Hilfe zu formatieren?

Danke schonmal im voraus.
Gruß Neonfly
Zuletzt geändert von neonfly am Dienstag 20. Juli 2010, 12:13, insgesamt 1-mal geändert.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nach meinem Verständnis der Doku geht das nicht. Zumindest ist es in der Doku genau so dargestellt wie bei dir...

Gruß, noisefloor
lunar

Es gibt keinen offiziellen Weg. Du kannst entweder ein Bug erstellen und hoffen, dass die Entwickler das irgendwann implementieren, oder Du liest den argparse-Code und versuchst, Deinen eigenen Formatter für die Hilfe zu implementieren.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Warum nicht einfach selbst anhand des ersten Arguments entscheiden, welcher Unterbefehl es ist und dann für jeden dieser Befehle eigene eigene argparse-Version haben? Kann doch nicht so schwer sein, die Usage für das "--help" ohne Unterbefehl selbst zu erzeugen.

Stefan
neonfly
User
Beiträge: 5
Registriert: Montag 19. Juli 2010, 08:26

So einfach ist das leider nicht. Da meine unterbefehle dynamisch geladen werden und ich auch für jeden callback-funktionen habe. Ohne sub parser werden ich nicht arbeiten können.
lunar

@sma: Warum nachbauen, was argparse schon von sich aus kann?

@neonfly: Ich habs grad nochmal probiert, argparse zeigt die Hilfe doch an?

Code: Alles auswählen

>>> import argparse
>>> argparse.__version__
'1.1'
>>> from argparse import ArgumentParser
>>> parser = ArgumentParser()
>>> subparsers = parser.add_subparsers()
>>> subparsers.add_parser('foo', help='I need some foo')
ArgumentParser(prog='ipython foo', usage=None, description=None, version=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
>>> subparsers.add_parser('bar', help='Gimme some bar')
ArgumentParser(prog='ipython bar', usage=None, description=None, version=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
>>> parser.print_help()
usage: ipython [-h] {foo,bar} ...

positional arguments:
  {foo,bar}
    foo       I need some foo
    bar       Gimme some bar

optional arguments:
  -h, --help  show this help message and exit
Verwendest Du eventuell eine ältere argparse-Version?
neonfly
User
Beiträge: 5
Registriert: Montag 19. Juli 2010, 08:26

Leider verwendest Du positional Arguments. Was ich verwende sind jedoch sub-parser.
(Link zur Doku)

Die ermöglichen es mir eine gewisse "Grammatik" in die Argumente zu bringen, was ich mit Positional Arguments nicht hinbekomme.
Aber so wie die positional Arguments aufgelistet sind, will ich auch die sub-commandos der sub-parser sehen.

Aber danke euch schonmal für die Hilfe.
lunar

@neonfly: Sieh Dir den Quelltext nochmal ganz scharf an ...
neonfly
User
Beiträge: 5
Registriert: Montag 19. Juli 2010, 08:26

Schande über mich. Sorry, da hab ich echt nicht genau nachgeschaut. Ich war durch die positional arguments überschrift in der Hilfe irritiert.
Ich werde dann nachher nochmal nachschauen, warum das bei mir nicht so schön aussieht. :-(
neonfly
User
Beiträge: 5
Registriert: Montag 19. Juli 2010, 08:26

Okey, der Fehler lag bei mir :-(
Ich habe zwar schön meine Sub-Parser dynamisch rerigstiert, jedoch nicht die help mit angegeben -.-
Logisch, dass er keine anzeigt.

Aber Danke für eure Hilfe.
Antworten