usage python3 parser metavar float example argumentparser argument arg python argparse

python3 - metavar python



Python argparse: ¿Hay una manera de especificar un rango en nargs? (1)

Podrías hacer esto con una acción personalizada :

import argparse def required_length(nmin,nmax): class RequiredLength(argparse.Action): def __call__(self, parser, args, values, option_string=None): if not nmin<=len(values)<=nmax: msg=''argument "{f}" requires between {nmin} and {nmax} arguments''.format( f=self.dest,nmin=nmin,nmax=nmax) raise argparse.ArgumentTypeError(msg) setattr(args, self.dest, values) return RequiredLength parser=argparse.ArgumentParser(prog=''PROG'') parser.add_argument(''-f'', nargs=''+'', action=required_length(2,3)) args=parser.parse_args(''-f 1 2 3''.split()) print(args.f) # [''1'', ''2'', ''3''] try: args=parser.parse_args(''-f 1 2 3 4''.split()) print(args) except argparse.ArgumentTypeError as err: print(err) # argument "f" requires between 2 and 3 arguments

Tengo un argumento opcional que soporta una lista de argumentos en sí.

Quiero decir, debería apoyar:

  • -f 1 2
  • -f 1 2 3

pero no:

  • -f 1
  • -f 1 2 3 4

¿Hay alguna manera de forzar esto dentro de argparse? Ahora estoy usando nargs = "*", y luego verificando la longitud de la lista.

Edición: según lo solicitado, lo que necesitaba era poder definir un rango de argumentos aceptables. Quiero decir, decir (en el ejemplo) 2 o 3 argumentos es correcto, pero no 1 o 4 o cualquier cosa que no esté dentro del rango 2..3