2008-12-03 9 views
24

No estoy seguro de qué optparse se usa el parámetro metavar para. Veo que se usa por todos lados, pero no puedo ver su uso.Python optparse metavar

¿Alguien me puede aclarar? Gracias.

Respuesta

27

Como dice @Guillaume, se utiliza para la generación de ayuda. Si desea tener una opción que tome un argumento, como un nombre de archivo, puede agregar el parámetro metavar a la llamada add_option para que su nombre/descriptor de argumento preferido aparezca en el mensaje de ayuda. De the current module documentation:

usage = "usage: %prog [options] arg1 arg2" 
parser = OptionParser(usage=usage) 
parser.add_option("-f", "--filename", 
        metavar="FILE", help="write output to FILE"), 

produciría ayuda de esta manera:

usage: <yourscript> [options] arg1 arg2 

options: 
    -f FILE, --filename=FILE 

el "archivo" después de la "f" y el "--filename" proviene de la metavar.

0

metavar es una variable utilizada para imprimir en la pantalla después de la opción. Por lo general, se utiliza para la sugerencia de entrada después de la opción son FILE o INT o STRING para el usuario. Sin metavar, optparse imprimirá el valor dest después de la opción que ha sido agregado.

0

Hay otro uso significativo de metavar en el que se desea usar 'dest' como la etiqueta de búsqueda de argumento pero enmascarar el mensaje de ayuda por metavar. (Por ejemplo, a veces útil al usar subparsers). (Como se indica en el comentario de S.Lott).

parser.add_argument(
     'my_fancy_tag', 
     help='Specify destination', 
     metavar='helpful_message' 
     ) 

o igualmente

parser.add_argument(
     dest='my_fancy_tag', 
     help='Specify destination', 
     metavar='helpful_message' 
     ) 

Ayuda mostrará el metavar:

./parse.py -h usage: parser [-h] destination 

positional arguments: 
    helpful_message Specify destination 

pero dest almacenará el fancy_tag en Espacio de nombres:

./parse.py test 
Namespace(my_fancy_tag='test') 
0

Ahora es preferible utilizar el argparse biblioteca en lugar de optparse.

Razones por las cuales se dan here.

Cuestiones relacionadas