Mensaje de servicio a los lectores recientes
Como esta pregunta todavía tiene visitas en 2016, antes de hacer nada con este complejo argparse, por favor, considere el uso de docopt lugar. Mejorará tanto su cordura como la de cualquier persona que pueda leer o modificar su código. Gracias.
Respuesta original
Como es, usted tiene algunos problemas.
En primer lugar, parser.parse_args
es un método que devuelve un espacio de nombres de argumentos parser
's, por lo que debe hacer algo como
args = parser.parse_args()
Entonces args.main_args
para obtener -main_arg
de una llamada como
program -main_arg run required_sub_arg -arg_a
Su problema con main_arg
es que ha creado un argumento para parser
nam ed main_arg
, y realiza una llamada al igual que
program run required_sub_arg -main_arg -arg_a
que hace referencia a un argumento a a
llamado main_arg
. Como a
no tiene dicho argumento, no es válido.
Para hacer referencia al argumento de un analizador desde uno de sus subparser, debe hacer que dicho subparser herede los argumentos de su principal. Esto se hace con
a=parser.add_subparser('run', parents=[parser])
Ha confundido el subparser para el analizador hijo. Consulte http://docs.python.org/dev/py3k/library/argparse.html y https://code.google.com/p/argparse/issues/detail?id=54 para obtener más información.
¿main-arg está destinado a ser un argumento para el analizador principal o el subparser? – katrielalex
main-arg es un argumento que se puede usar en cualquier subparser –