[PYTHON] argparse help verwaltet das verwirrende Phänomen aufgrund des optionalen Formats und seiner Beschreibung

Einführung

Hallo rtanpo440.

Pythons Standard-Befehlszeilenparser argparse ist nett! Ich bin neu in Python und ich bin neu darin, aber ich dachte, der Befehlszeilenparser sei so einfach zu schreiben.

Und argparse generiert automatisch Hilfe für Sie. Die Option -h`` --help wird automatisch hinzugefügt und Sie können sie gut sehen, ohne dass Sie selbst add_argument müssen.

Dokumentation: https://docs.python.org/ja/3/library/argparse.html

Problem

Es gibt jedoch nur einen Fall. Das heißt, das Format und die Beschreibung jeder Option sind überfordert, was das Lesen erschwert.

before


#!/usr/bin/python3

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-m', '--foo', help='Foo foo foo.')
parser.add_argument('-l', '--bar', nargs='+', help='Bar bar bar.')
parser.add_argument('-o', '--long-long-long-option', action='store_true', help='Just a so long option, but do nothing')
parser.parse_args()

result1.png

Standardmäßig wird die Beschreibung jeder Option von einer festen Position aus angezeigt, unabhängig davon, wie viele Zeichen das Format hat. Selbst wenn das Format lang ist, wird es nicht umgebrochen und die Beschreibung wird in der nächsten Zeile angezeigt, sodass das Format über die Beschreibungsspalte hinausgeht.

Das ist schwer zu lesen !! Was soll ich tun ... Als ich mir das Dokument angesehen habe, scheint es etwas zu geben, das "HelpFormatter" heißt. Wie der Name schon sagt, wird das Hilfeformat angepasst, und es scheint, dass standardmäßig vier Unterklassen mit Funktionen wie dem Anzeigen von Standardwerten und dem Beibehalten von Zeilenumbrüchen bereitgestellt werden.

…… In der offiziellen Dokumentation wurden jedoch die vier standardmäßig bereitgestellten Unterklassen erläutert, aber ich wusste nicht, wie ich den HelpFormatter selbst erben und anpassen sollte. Lesen Sie daher die Implementierung. Ich versuchte es durch Tappen.

Schauen Sie sich HelpFormatter an

Die Erklärung auf der rechten Seite wird an der 24. Position angezeigt, wenn der linke Bildschirmrand 0 ist. Als ich also nach 24 gesucht habe, habe ich so etwas gefunden.

definition.png

self._max_help_position scheint an diesem Problem beteiligt zu sein. Dann erbe gewaltsam welche Klasse und überschreibe self._max_help_position !!

Lösungen

Nach vielen Experimenten hat der folgende Code funktioniert.

Erstellt "ForceOneLineHelpFormatter" durch Erben von "HelpFormatter".

after


#!/usr/bin/python3

import argparse

class ForceOneLineHelpFormatter(argparse.HelpFormatter):
    def __init__(self, *args, **namedargs):
        super().__init__(*args, **namedargs)
        self._max_help_position = 999

parser = argparse.ArgumentParser(formatter_class=ForceOneLineHelpFormatter)
parser.add_argument('-m', '--foo', help='Foo foo foo.')
parser.add_argument('-l', '--bar', nargs='+', help='Bar bar bar.')
parser.add_argument('-o', '--long-long-long-option', action='store_true', help='Just a so long option, but do nothing')
parser.parse_args()

Ich habe self._max_help_position aus irgendeinem Grund auf 999 gesetzt, aber es scheint, dass es intern automatisch angepasst wird, so dass zwischen dem Format links und der Beschreibung rechts nicht zu viel Platz ist. Mit anderen Worten, wenn dieser Wert gerade ausreichend größer als die erwartete Bildschirmbreite ist, gibt es kein Problem.

Und hier ist das Ergebnis der tatsächlichen Ausführung mit "--help".

result2.png

Oh! Gutes Gefühl! Aber vielleicht gibt es einen besseren Weg ...

Zusammenfassung

Recommended Posts

argparse help verwaltet das verwirrende Phänomen aufgrund des optionalen Formats und seiner Beschreibung
Wie man Argparse benutzt und den Unterschied zwischen Optparse