Załóżmy, że mam następujący fragment kodu:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Obecnie --help
zwraca:
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.
Wolałbym coś takiego:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Zerknięcie na kod formatera pomocy ujawnił ograniczone opcje. Czy istnieje sprytny sposób na argparse
wydrukowanie domyślnej wartości --scan-time
w podobny sposób, czy też powinienem po prostu podklasować help
formatyzator?
Odpowiedzi:
Użyj
argparse.ArgumentDefaultsHelpFormatter
formatyzatora :Aby zacytować dokumentację:
Zauważ, że dotyczy to tylko argumentów ze zdefiniowanym tekstem pomocy ; bez
help
wartości dla argumentu, nie ma komunikatu o pomoc, aby dodać informacje o wartości domyślnej do .Dokładne wyjście dla opcji czasu skanowania staje się wtedy:
źródło
default=
wskazują wartość domyślną? Ponieważ nie podoba mi się tekst „default: None”.default
doSUPPRESS
:default=argparse.SUPPRESS
. Należy zauważyć, że w tym przypadku nie ma atrybutu zostanie dodana do wyniku przestrzeni nazw, jeśli ten argument został pominięty, zobaczyć siędefault
z dokumentacją .help
argument doadd_argument
i to powinno działać.Dodaj
'%(default)s'
do parametru pomocy, aby kontrolować wyświetlane informacje.źródło
Klasa opakowania
Jest to najbardziej niezawodne i SUCHE podejście, jakie do tej pory znalazłem, aby zarówno wyświetlać wartości domyślne, jak i używać innego formatyzatora, takiego jak
argparse.RawTextHelpFormatter
:Wynik:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
wielokrotne dziedziczenieWielokrotne dziedziczenie po prostu działa, ale nie wydaje się publicznym API:
Wynik:
To po prostu działa, ponieważ, jak możemy łatwo zobaczyć ze źródeł https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648, że:
RawTextHelpFormatter
narzędzia_split_lines
ArgumentDefaultsHelpFormatter
narzędzia_get_help_string
więc możemy zgadywać, że będą ze sobą dobrze współpracować.
Nie wydaje się to jednak publicznym interfejsem API,
formatter_class
podobnie jak metody , więc nie sądzę, że istnieje obecnie publiczny sposób interfejsu API.argparse
docstring mówi:Zobacz także: Dostosuj komunikat pomocy argparse
Testowane na Pythonie 3.6.5.
źródło