parser ejemplo argumentparser arg_parser add_argument python command-line-arguments user-input argparse spaces

ejemplo - arguments parser python



Manejar espacios en entrada argparse. (4)

Después de algunos experimentos (Python 2.7 Win10) descubrí que la regla de oro es poner comillas ("") alrededor de los argumentos que contienen espacios y NO poner si no hay espacios en el argumento. Incluso si está pasando una cadena / ruta. También poner una comillas simples ('''') es una mala idea, al menos para Windows.

Pequeño ejemplo: python script.py --path .... / Some_Folder / --string "Aquí va una cadena"

Usando python y argparse, el usuario podría ingresar un nombre de archivo con -d como bandera.

parser.add_argument("-d", "--dmp", default=None)

Sin embargo, esto falló cuando la ruta incluía espacios. P.ej

-d C:/SMTHNG/Name with spaces/MORE/file.csv

NOTA: los espacios causarían un error (la marca solo toma ''C: SMTHNG / Name'' como entrada).

error: unrecognized arguments: with spaces/MORE/file.csv

Tardé más de lo necesario para encontrar la solución a este problema ... (no encontré una sesión de preguntas y respuestas, por lo que estoy haciendo mi propia publicación)


Me topé con este problema hoy también.

-d "foo bar"

no ayudo Tuve que agregar el signo igual

-d="foo bar"

y luego funcionó.


Para aquellos que no pueden analizar los argumentos y aún así obtienen "error: argumentos no reconocidos:" encontré una solución:

parser.add_argument(''-d'', ''--dmp'', nargs=''+'', ...) opts = parser.parse_args()

y luego cuando quieras usarlo solo hazlo

'' ''.join(opts.dmp)


Solución simple: argparse considera una cadena llena de espacio como un solo argumento si está encapsulada entre comillas.

Esta entrada funcionó y "solucionó" el problema:

-d "C:/SMTHNG/Name with spaces/MORE/file.csv"

AVISO: el argumento tiene "" a su alrededor.