Argparse: esperaba un argumento

Tengo la configuración de argumentos argparse de la siguiente manera:

parser = argparse.ArgumentParser(description='foobar')
parser.add_argument('url', metavar='URL')
parser.add_argument('-k', dest='kindle_type', default='kindle3')
parser.add_argument('-n', dest='gallery_name', default='Gallery')
parser.add_argument('-d', dest='dropbox_dir')
args = parser.parse_args()

print parser.parse_args(['imgur_url', '-k'])

Sin embargo, cuando corro script.py -k kindledx http://url.com, Obtuve el siguiente error: gallery2kindle.py: error: argument -k: expected one argument

¿No se llamó un argumento cuando usé 'kindledx' después de la bandera '-k'?

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

¿No se llamó un argumento cuando usé 'kindledx' después de la bandera '-k'?

Lo fue, y si le agregas un print args después de args = parser.parse_args(), puedes ver los trabajos de análisis:

~/coding$ python ap.py -k kindledx http://url.com
Namespace(dropbox_dir=None, gallery_name='Gallery', kindle_type='kindledx', url='http://url.com')

pero en esta linea

print parser.parse_args(['imgur_url', '-k'])

no pasar un argumento a k. Comparar

print parser.parse_args(['imgur_url', '-k', 'kindledx'])

que produce

Namespace(dropbox_dir=None, gallery_name='Gallery', kindle_type='kindledx', url='imgur_url')

Respondido el 12 de junio de 12 a las 16:06

Dado que este es el primer resultado de buscar en Google este error, quiero compartir que puede suceder si sigue los consejos para ser compatible con Windows. / en Linux:

arg_parser = argparse.ArgumentParser(
    prefix_chars='-+/', description='desc')

Esto causa -option /path/path tiros expected one argument aunque parezca válido. Necesitas citas para que sea -option '/path/path' o quitar el / en la prefix_chars arriba para arreglarlo.

Respondido 21 ago 19, 09:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.