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
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()
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.
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.
self._max_help_position
scheint an diesem Problem beteiligt zu sein. Dann erbe gewaltsam welche Klasse und überschreibe self._max_help_position
!!
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".
Oh! Gutes Gefühl! Aber vielleicht gibt es einen besseren Weg ...
_max_help_position
auf einen großen Wert wie 999 in __init__
.
--Dann wird die Beschreibungsposition automatisch angepasst und die Beschreibung wird ordentlich auf der rechten Seite des Formats angezeigt.