usage python3 parser float example argumentparser argument arg python argparse optparse

float - python3 arg parser



Python argparse ignora argumentos no reconocidos (3)

En realidad, argparse todavía "ignora" _unrecognized_args . Siempre que estos argumentos "no reconocidos" no usen el prefijo predeterminado , no escuchará quejas del analizador.

Usando la configuración de @anutbu pero con el estándar parse.parse_args() , si tuviéramos que ejecutar nuestro programa con los siguientes argumentos.

$ program --foo BAR a b +cd e

Tendremos esta colección de datos de Espacio de nombres para trabajar.

Namespace(_unrecognized_args=[''a'', ''b'', ''+cd'', ''e''], foo=''BAR'')

Si quisiéramos usar el prefijo predeterminado - ignorado, podríamos cambiar ArgumentParser y decidir que vamos a usar un + para nuestros argumentos "reconocidos" en su lugar.

parser = argparse.ArgumentParser(prefix_chars=''+'') parser.add_argument(''+cd'')

El mismo comando producirá

Namespace(_unrecognized_args=[''--foo'', ''BAR'', ''a'', ''b''], cd=''e'')

Ponlo en tu pipa y fumate =)

nJoy!

Optparse, la versión anterior simplemente ignora todos los argumentos no reconocidos y continúa. En la mayoría de las situaciones, esto no es ideal y se modificó en argparse. Pero hay algunas situaciones en las que desea ignorar los argumentos no reconocidos y analizar los que ha especificado.

Por ejemplo:

parser = argparse.ArgumentParser() parser.add_argument(''--foo'', dest="foo") parser.parse_args() $python myscript.py --foo 1 --bar 2 error: unrecognized arguments: --bar

¿Hay alguna forma de sobreescribir esto?


Puede poner las partes restantes en un nuevo argumento con parser.add_argument(''args'', nargs=argparse.REMAINDER) si desea usarlas.


Reemplazar

args = parser.parse_args()

con

args, unknown = parser.parse_known_args()

Por ejemplo,

import argparse parser = argparse.ArgumentParser() parser.add_argument(''--foo'') args, unknown = parser.parse_known_args([''--foo'', ''BAR'', ''spam'']) print(args) # Namespace(foo=''BAR'') print(unknown) # [''spam'']