Seite 1 von 1

Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 08:37
von neonfly
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

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 11:33
von noisefloor
Hallo,

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

Gruß, noisefloor

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 11:51
von 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.

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 17:18
von sma
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

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 17:32
von neonfly
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.

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 17:41
von 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?

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 18:27
von neonfly
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.

Re: Argparse Help formatieren

Verfasst: Montag 19. Juli 2010, 18:39
von lunar
@neonfly: Sieh Dir den Quelltext nochmal ganz scharf an ...

Re: Argparse Help formatieren

Verfasst: Dienstag 20. Juli 2010, 06:21
von neonfly
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. :-(

Re: Argparse Help formatieren

Verfasst: Dienstag 20. Juli 2010, 12:11
von neonfly
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.