Angenommen, ich habe das folgende Argparse-Snippet:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Derzeit --help
kehrt zurück:
usage: connection_check.py [-h]
[--version] [--scan-time [SCAN_TIME]]
Test the reliability/uptime of a connection.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
Ich würde so etwas bevorzugen wie:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Ein Blick auf den Formatierungscode der Hilfe ergab begrenzte Optionen. Gibt es eine clevere Möglichkeit, argparse
den Standardwert für --scan-time
auf ähnliche Weise zu drucken , oder sollte ich den help
Formatierer einfach unterordnen?
Antworten:
Verwenden Sie den
argparse.ArgumentDefaultsHelpFormatter
Formatierer :So zitieren Sie die Dokumentation:
Beachten Sie, dass dies nur für Argumente gilt, für die Hilfetext definiert ist . ohne
help
Wert für ein Argument, gibt es keine Hilfemeldung Informationen über den Standardwert hinzuzufügen , zu .Die genaue Ausgabe für Ihre Scan-Zeit-Option lautet dann:
quelle
default=
Wert den Standardwert anzeigen? Da ich die 'default: None'-Texte nicht mag.default
anSUPPRESS
:default=argparse.SUPPRESS
. Beachten Sie, dass kein Attribut in diesem Fall wird auf das Namespace Ergebnis hinzugefügt werden , wenn dieses Argument weggelassen wurde, siehe diedefault
Dokumentation .help
Argument hinzuadd_argument
und das sollte funktionieren.Fügen Sie
'%(default)s'
dem Hilfeparameter hinzu , um zu steuern, was angezeigt wird.quelle
Wrapper-Klasse
Dies ist die zuverlässigste und DRY Ansatz , den ich bisher auf beide zeigen Standardwerte gefunden haben und eine andere Formatierer so verwenden , wie
argparse.RawTextHelpFormatter
zur gleichen Zeit:Ausgabe:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
MehrfachvererbungMehrfachvererbung funktioniert nur, scheint aber keine öffentliche API zu sein:
Ausgabe:
Es funktioniert einfach, weil, wie wir aus den Quellen https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 trivial sehen können, dass:
RawTextHelpFormatter
Geräte_split_lines
ArgumentDefaultsHelpFormatter
Geräte_get_help_string
Wir können also davon ausgehen, dass sie gut zusammenarbeiten werden.
Dies scheint jedoch keine öffentliche API zu sein, und die Methoden
formatter_class
auch nicht. Daher glaube ich nicht, dass es derzeit eine öffentliche API-Methode gibt, um dies zu tun.argparse
docstring sagt:Siehe auch: Argparse-Hilfemeldung anpassen
Getestet auf Python 3.6.5.
quelle