Supongamos que tengo el siguiente fragmento de argumento:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Actualmente, --help
devuelve:
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.
Preferiría algo como:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Echar un vistazo al código del formateador de ayuda reveló opciones limitadas. ¿Hay una manera inteligente argparse
de imprimir el valor predeterminado de --scan-time
manera similar, o debería subclasificar el help
formateador?
Respuestas:
Usa el
argparse.ArgumentDefaultsHelpFormatter
formateador :Para citar la documentación:
Tenga en cuenta que esto solo se aplica a los argumentos que tienen texto de ayuda definido ; sin
help
valor para un argumento, no hay ningún mensaje de ayuda para agregar información sobre el valor por defecto a .La salida exacta para su opción de tiempo de escaneo se convierte en:
fuente
default=
muestren el valor predeterminado? Como no me gustan los textos 'por defecto: ninguno'.default
queSUPPRESS
:default=argparse.SUPPRESS
. Tenga en cuenta que en ese caso no se agregará ningún atributo al resultado del espacio de nombres si se omitió ese argumento, consulte ladefault
documentación .help
argumentoadd_argument
y eso debería funcionar.Agregue
'%(default)s'
al parámetro de ayuda para controlar lo que se muestra.fuente
Clase de envoltura
Este es el enfoque SECO más confiable que he encontrado hasta ahora para mostrar los valores predeterminados y utilizar otro formateador, como
argparse.RawTextHelpFormatter
al mismo tiempo:Salida:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
herencia múltipleLa herencia múltiple simplemente funciona, pero no parece ser una API pública:
Salida:
Simplemente funciona, porque como podemos ver trivialmente de las fuentes https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 que:
RawTextHelpFormatter
implementos_split_lines
ArgumentDefaultsHelpFormatter
implementos_get_help_string
así que podemos adivinar que funcionarán bien juntos.
Sin embargo, esto no parece ser una API pública, y tampoco lo son los métodos
formatter_class
, por lo que no creo que haya una forma de API pública para hacerlo actualmente.argparse
docstring dice:Consulte también: Personalizar el mensaje de ayuda de argparse
Probado en Python 3.6.5.
fuente