metavar - argparse python example
Elecciones argparse insensibles a mayúsculas y minúsculas (2)
Transformar el argumento en minúsculas usando
type = lambda s : s.lower()
para el -p
.
Como señaló por chepner en los comentarios, ya que str.lower
ya es una función apropiada, el contenedor lambda no es necesariamente necesario y usted podría simplemente usar
type = str.lower
directamente.
¿Es posible verificar las opciones de argparse de manera que no distinga entre mayúsculas y minúsculas?
import argparse
choices = ["win64", "win32"]
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "Win32"]))
resultados en:
usage: choices.py [-h] [-p {win64,win32}]
choices.py: error: argument -p: invalid choice: ''Win32'' (choose from ''win64'',''win32'')
Usar lower
palabra lower
en el type
es una buena manera de hacerlo, si no le importa perder la información del caso.
Si desea conservar el caso, puede definir una clase de choices
personalizadas. Las choices
necesitan dos métodos, __contains__
(para pruebas in
), e iteration (para enumerar las opciones).
class mylist(list):
# list subclass that uses lower() when testing for ''in''
def __contains__(self, other):
return super(mylist,self).__contains__(other.lower())
choices=mylist([''win64'',''win32''])
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "Win32"]))
# Namespace(p=''Win32'')
La ayuda es:
usage: ipython [-h] [-p {win64,win32}]
optional arguments:
-h, --help show this help message and exit
-p {win64,win32}