Argparse orden incorrecto de parámetros posicionales y opcionales
-
27-10-2019 - |
Pregunta
¿Por qué Argparse no analizará estos argumentos?
--foo 1 2 3 bar
Usando
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
que da el siguiente error:
Error: muy pocos argumentos
Sin embargo, si paso el argumento de la barra, funciona:
bar --foo 1 2 3
Ahora, esto en sí mismo no es tan malo. Puedo vivir con los argumentos posicionales primero, es solo que este comportamiento es inconsistente con la ayuda que Argparse crea para nosotros, lo que establece que Bar debería ser el último:
Uso: argparsetest.py [-h] [-foo foo [foo ...]] bar
Entonces, ¿cómo haces que esto funcione con un texto de ayuda consistente?
Aquí hay un completo Programa de prueba.
Solución
¿Quizás intente hacer - -Input --Output Flags y configurar esas opciones para requerir = true en el add_argument?
http://docs.python.org/dev/library/argparse.html#the-add-argument-method
Otros consejos
nargs='+'
le dice a Argparse que reúna todos los args restantes juntos, así que bar
está incluido. No tiene una forma mágica de adivinar que pretendes bar
ser un argumento significativo por sí mismo y no parte de los args llevados a --foo
.
El ejemplo en los documentos se refiere a un simple --foo
argumento, no uno con nargs='+'
. Asegúrese de comprender la diferencia.