usage python3 parser float argumentparser argument arg python argparse

python3 - python argparse argumentparser()



Argparse: ¿Cómo incluir valores predeterminados en ''--help''? (4)

Supongamos que tengo el siguiente fragmento de código argparse:

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)

Mirando el código del formateador de ayuda reveló opciones limitadas. ¿Hay alguna forma inteligente de hacer que argparse imprima el valor predeterminado para --scan-time de una manera similar, o debería simplemente subclasificar el formateador de help ?


Agregue ''%(default)'' al parámetro de ayuda para controlar lo que se muestra.

parser.add_argument("--type", default="toto", choices=["toto","titi"], help = "type (default: %(default)s)")


No hay default para el Optparser en python.
Sin embargo, puedes usar el siguiente

# show help as default if len(sys.argv) == 1: os.system("python " + sys.argv[0] + " -h") exit()

Esto ejecutará el mismo script con la opción -h , y saldrá.
Tenga en cuenta que tendrá que import os, sys módulos de sistema import os, sys para utilizar esta opción.


Utilice el formateador argparse.ArgumentDefaultsHelpFormatter :

parser = argparse.ArgumentParser( # ... other options ... formatter_class=argparse.ArgumentDefaultsHelpFormatter)

Para citar la documentación:

La otra clase de formateador disponible, ArgumentDefaultsHelpFormatter , agregará información sobre el valor predeterminado de cada uno de los argumentos.

Tenga en cuenta que esto solo se aplica a los argumentos que tienen texto de ayuda definido ; sin un valor de help para un argumento, no hay que agregar información a .

La salida exacta para su opción de tiempo de escaneo se convierte entonces en:

--scan-time [SCAN_TIME] Wait SCAN-TIME seconds between status checks. (default: 5)


ArgumentDefaultsHelpFormatter + RawTextHelpFormatter herencia múltiple

La herencia múltiple simplemente funciona, aunque no parece ser una API pública:

#!/usr/bin/env python3 import argparse import sys class RawTextArgumentDefaultsHelpFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawTextHelpFormatter): pass parser = argparse.ArgumentParser(formatter_class=RawTextArgumentDefaultsHelpFormatter) parser.add_argument(''-a'', default=13, help="""my help for a""") parser.add_argument(''-b'', default=42, help="""my help for b""") parser.print_help()

Salida:

usage: a.py [-h] [-a A] [-b B] optional arguments: -h, --help show this help message and exit -a A my help for a (default: 13) -b B my help for b (default: 42)

Simplemente funciona porque como podemos ver de forma trivial desde las fuentes https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 eso:

  • RawTextHelpFormatter implementa _split_lines
  • ArgumentDefaultsHelpFormatter implementa _get_help_string

así que podemos adivinar que trabajarán juntos muy bien.

Sin embargo, esto no parece ser una API pública, y tampoco lo son los métodos de formatter_class , por lo que no creo que haya una forma pública de API para hacerlo actualmente. argparse docstring dice:

Todas las demás clases en este módulo se consideran detalles de implementación. (También tenga en cuenta que HelpFormatter y RawDescriptionHelpFormatter solo se consideran públicos como nombres de objetos; la API de los objetos del formateador aún se considera un detalle de implementación).

Ver también: Personalizar mensaje de ayuda argparse.

Probado en Python 3.6.5.