namespace - ¿Cómo hacer una versión corta y larga de un argumento requerido usando Python Argparse?
python argparse example (1)
Quiero especificar un argumento requerido llamado inputdir
pero también me gustaría tener una versión abreviada de él llamada i
. No veo una solución concisa para hacer esto sin hacer ambos argumentos opcionales y luego hacer mi propio control. ¿Hay una práctica preferida para esto que no veo o la única forma de hacerlo es opcional y hacer mi propio manejo de errores?
Aquí está mi código:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("inputdir", help="Specify the input directory")
parser.parse_args()
Para las banderas (opciones que comienzan con -
o --
) pase las opciones con las banderas. Puede especificar múltiples opciones:
parser.add_argument(''-i'', ''--inputdir'', help="Specify the input directory")
Consulte la documentación de opción de nombre o banderas :
El método
add_argument()
debe saber si se espera un argumento opcional, como-f
o--foo
, o un argumento posicional, como una lista de nombres de archivos. Los primeros argumentos pasados aadd_argument()
, por lo tanto, deben ser una serie de indicadores o un nombre de argumento simple.
Manifestación:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(''-i'', ''--inputdir'', help="Specify the input directory")
_StoreAction(option_strings=[''-i'', ''--inputdir''], dest=''inputdir'', nargs=None, const=None, default=None, type=None, choices=None, help=''Specify the input directory'', metavar=None)
>>> parser.print_help()
usage: [-h] [-i INPUTDIR]
optional arguments:
-h, --help show this help message and exit
-i INPUTDIR, --inputdir INPUTDIR
Specify the input directory
>>> parser.parse_args([''-i'', ''/some/dir''])
Namespace(inputdir=''/some/dir'')
>>> parser.parse_args([''--inputdir'', ''/some/dir''])
Namespace(inputdir=''/some/dir'')
Sin embargo, el primer elemento para los argumentos requeridos es solo un marcador de posición. -
y --
opciones son siempre opcionales (esa es la convención de la línea de comando), los argumentos requeridos nunca se especifican con tales interruptores. En su lugar, la ayuda de la línea de comandos mostrará dónde colocar los argumentos requeridos con un marcador de posición basado en el primer argumento pasado a add_argument()
, que se debe pasar sin guiones.
Si tiene que romper con esa convención y usar un argumento que comienza con -
o --
que se requiere de todos modos , tendrá que hacer su propia comprobación:
args = parser.parse_args()
if not args.inputdir:
parser.error(''Please specify an inputdir with the -i or --inputdir option'')
Aquí, el método parser.error()
imprimirá la información de ayuda junto con su mensaje de error y luego saldrá.