Предположим, у меня есть следующий фрагмент argparse:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
В настоящее время --help
возвращается:
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.
Я бы предпочел что-то вроде:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Подглядывание за помощью в коде форматера показало ограниченные возможности. Есть ли умный способ получить argparse
значение по умолчанию для --scan-time
аналогичным образом, или я должен просто подклассифицировать help
форматтер?
Ответы:
Используйте
argparse.ArgumentDefaultsHelpFormatter
форматтер :Цитировать документацию:
Обратите внимание, что это относится только к аргументам, для которых определен текст справки ; без
help
значения аргумента отсутствует справочное сообщение, в которое можно добавить информацию о значении по умолчанию .Точный вывод для вашего параметра времени сканирования становится следующим:
источник
default=
показывают значение по умолчанию? Поскольку мне не нравятся тексты «default: None».default
наSUPPRESS
:default=argparse.SUPPRESS
. Обратите внимание , что в этом случае не атрибут не будет добавлен к результату пространства имен , если этот аргумент был опущен, см вdefault
документации .help
аргумент вadd_argument
и это должно работать.Добавьте
'%(default)s'
к параметру справки, чтобы контролировать то, что отображается.источник
Класс Wrapper
Это самый надежный и СУХОЙ подход, который я нашел до сих пор, чтобы показывать значения по умолчанию и использовать другой форматер, такой как
argparse.RawTextHelpFormatter
:Вывод:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
множественное наследованиеМножественное наследование просто работает, но оно не является публичным API:
Вывод:
Это просто работает работает, потому что, как мы можем легко увидеть из источников https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648, что:
RawTextHelpFormatter
инвентарь_split_lines
ArgumentDefaultsHelpFormatter
инвентарь_get_help_string
так что мы можем догадаться, что они будут отлично работать вместе.
Тем не менее, это не похоже на публичный API, как и методы
formatter_class
, поэтому я не думаю, что в настоящее время существует публичный способ API сделать это.argparse
Докстринг говорит:См. Также: Настройка сообщения справки argparse.
Протестировано на Python 3.6.5.
источник