Frage

Wie in die Dokumentation die optparse.OptionParser verwendet einen IndentedHelpFormatter zur Ausgabe des formatierten Option Hilfe, für die die ich einige API-Dokumentation .

Ich mag für die erforderlichen, Positions Argumente in dem Nutzungs Text einen ähnlich formatierte Hilfetext angezeigt werden soll. Gibt es einen Adapter oder ein einfaches Nutzungsmuster, die für ähnliche Positions Argument Formatierung verwendet werden können?

Klarstellung

Vorzugsweise wird nur die stdlib verwenden. Optparse tut große Ausnahme für diese eine Formatierung Nuance, die ich fühle mich wie wir ohne sie zu importieren ganz andere Pakete zu beheben sollten in der Lage. : -)

War es hilfreich?

Lösung

Der beste Weg wäre, einen Patch auf die optparse Modul zu schreiben. In der Zwischenzeit können Sie dies mit einer leicht modifizierten OptionParser Klasse erreichen. Dies ist nicht perfekt, aber es bekommen, was Sie erreichen wollen.

#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter

class PosOptionParser(OptionParser):
    def format_help(self, formatter=None):
        class Positional(object):
            def __init__(self, args):
                self.option_groups = []
                self.option_list = args

        positional = Positional(self.positional)
        formatter = IndentedHelpFormatter()
        formatter.store_option_strings(positional)
        output = ['\n', formatter.format_heading("Positional Arguments")]
        formatter.indent()
        pos_help = [formatter.format_option(opt) for opt in self.positional]
        pos_help = [line.replace('--','') for line in pos_help]
        output += pos_help
        return OptionParser.format_help(self, formatter) + ''.join(output)

    def add_positional_argument(self, option):
        try:
            args = self.positional
        except AttributeError:
            args = []
        args.append(option)
        self.positional = args

    def set_out(self, out):
        self.out = out
def main():
    usage = "usage: %prog [options] bar baz"
    parser = PosOptionParser(usage)
    parser.add_option('-f', '--foo', dest='foo',
                      help='Enable foo')
    parser.add_positional_argument(Option('--bar', action='store_true',
                                   help='The bar positional argument'))
    parser.add_positional_argument(Option('--baz', action='store_true',
                                   help='The baz positional argument'))
    (options, args) = parser.parse_args()
    if len(args) != 2:
        parser.error("incorrect number of arguments")
    pass

if __name__ == '__main__':
    main()

Und die Ausgabe, die Sie vom Laufen dieser:

Usage: test.py [options] bar baz

  Options:
    -h, --help         show this help message and exit
    -f FOO, --foo=FOO  Enable foo

Positional Arguments:
  bar  The bar positional argument
  baz  The baz positional argument

Andere Tipps

Versuchen Sie, einen Blick auf argparse . Dokumentation sagt Position Argument und schönere Hilfenachricht unterstützt.

würde ich in eine saubere Lösung dieses Problems interessiert sein; Ich war nicht in der Lage, mit einem zu kommen. Die OptionParser wirklich konzentriert sich ganz auf die Optionen; es nicht geben Sie etwas mit Position args zu arbeiten, soweit ich feststellen konnte ich zu.

Was ich tat, war eine Liste mit wenig Dokumentation Blöcke für jeden meiner Positionsargumente zu erzeugen, indem \ts den richtigen Abstand zu bekommen. Dann trat ich sie mit Zeilenumbrüchen und die beigefügten, dass auf die ‚Verwendung‘ String, der den OptionParser übergeben wird.

Es sieht gut aus, aber es fühlt sich dumm und selbstverständlich, dass die Dokumentation endet oberhalb der Liste der Optionen erscheinen auf. Ich habe keine Möglichkeit um das gefunden, oder, wie man jede komplexe Dinge zu tun, das heißt eine bestimmte Reihe von Optionen unter der Beschreibung für eine Positions arg beschrieben wird, weil sie nur auf diese arg gelten.

schaute ich auf Affe-Patchen OptionParser Methoden und ich erinnere mich (dies war ein Jahr oder so vor), dass es nicht so schwierig gewesen wäre, aber ich wollte nicht, diesen Weg zu gehen.

Die meisten Hilfetext für Positionsargumente ähnelt das Format häufig in Manpages * NIX-Boxen verwendet. Schauen Sie sich auf , wie der Befehl ‚cp‘ dokumentiert. Ihr Hilfetext soll, dass ähneln.

Ansonsten solange Sie das „Hilfe“ Argument ausfüllen, während der Parser, die Dokumentation sollte selbst produzieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top