Suponha que eu tenha o seguinte trecho de argumento:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Atualmente, --help
retorna:
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.
Eu preferiria algo como:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Espreitar o código do formatador de ajuda revelou opções limitadas. Existe uma maneira inteligente argparse
de imprimir o valor padrão de --scan-time
maneira semelhante ou devo apenas subclassificar o help
formatador?
Respostas:
Use o
argparse.ArgumentDefaultsHelpFormatter
formatador :Para citar a documentação:
Observe que isso se aplica apenas a argumentos que possuem texto de ajuda definido ; sem
help
valor para um argumento, não há nenhuma mensagem de ajuda para adicionar informações sobre o valor padrão para .A saída exata para a sua opção de tempo de varredura se torna:
fonte
default=
mostram o valor padrão? Como não gosto dos textos 'default: None'.default
queSUPPRESS
:default=argparse.SUPPRESS
. Observe que, nesse caso, nenhum atributo será adicionado ao resultado do espaço para nome se esse argumento for omitido, consulte adefault
documentação .help
argumentoadd_argument
e isso deve funcionar.Adicione
'%(default)s'
ao parâmetro de ajuda para controlar o que é exibido.fonte
Classe Wrapper
Essa é a abordagem mais confiável e DRY que eu encontrei até agora para mostrar padrões e usar outro formatador, como
argparse.RawTextHelpFormatter
ao mesmo tempo:Resultado:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
herança múltiplaA herança múltipla simplesmente funciona, mas não parece ser uma API pública:
Resultado:
Ele simplesmente funciona funciona porque, como podemos ver trivialmente das fontes https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648, que:
RawTextHelpFormatter
implementa_split_lines
ArgumentDefaultsHelpFormatter
implementa_get_help_string
para que possamos adivinhar que eles funcionarão juntos muito bem.
No entanto, isso não parece ser uma API pública, nem os métodos
formatter_class
, então não acho que exista uma maneira pública de fazer isso atualmente.argparse
docstring diz:Consulte também: Personalizar a mensagem de ajuda do argparse
Testado em Python 3.6.5.
fonte