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, --helpdevuelve:
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 argparsede imprimir el valor predeterminado de --scan-timemanera similar, o debería subclasificar el helpformateador?

Respuestas:
Usa el
argparse.ArgumentDefaultsHelpFormatterformateador :Para citar la documentación:
Tenga en cuenta que esto solo se aplica a los argumentos que tienen texto de ayuda definido ; sin
helpvalor 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'.defaultqueSUPPRESS: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 ladefaultdocumentación .helpargumentoadd_argumenty 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.RawTextHelpFormatteral mismo tiempo:Salida:
ArgumentDefaultsHelpFormatter+RawTextHelpFormatterherencia 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:
RawTextHelpFormatterimplementos_split_linesArgumentDefaultsHelpFormatterimplementos_get_help_stringasí 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.argparsedocstring dice:Consulte también: Personalizar el mensaje de ayuda de argparse
Probado en Python 3.6.5.
fuente