Argumentos con OptionParser 2007-03-05

En la versión 2.3 de Python se añadió el módulo optparse a la librería estándar, el cual nos sirve para parsear las opciones y argumentos que se pasan a nuestros programas, haciendo fácil y cómodo el lidiar con ellos.

Pondré un ejemplo:

from optparse import OptionParser

if __name__ == '__main__':
    usage = "%prog [options] arg1 arg2"

    parser = OptionParser(usage=usage, version="%prog 1.0")
    parser.add_option('-v','--verbose', action='store_true',
                      dest='verbose', help='shows detailed information')
    parser.add_option('-q','--quiet', action='store_false',
                      dest='verbose', help='hides detailed information')
    parser.add_option('-f','--filename', action='store',
                      dest='filename', help='name of the file to load')


    (options, args) = parser.parse_args()

    if options.verbose:
        print "Extra info enabled"
    else:
        print "Extra info disabled"
    if options.filename:
        print "I'll open", options.filename, "file."
    if args > 0:
        print "\nArguments:"
        for x in args:
            print "  ",x

Ahora veamos algunos resultados según los argumentos que pasemos (en negrita el comando ejecutado):

$ python option.py

Extra info disabled
$ python option.py -v

Extra info enabled
$ python option.py -h

usage: option.py [options] arg1 arg2

options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         shows detailed information
  -q, --quiet           hides detailed information
  -f FILENAME, --filename=FILENAME
                        name of the file to load
$ python option.py -f fichero.txt "First" "Second" "Last argument"

Extra info disabled
I'll open fichero.txt file.

Arguments:
   First
   Second
   Last argument

Fijaos que distingue las opciones de los argumentos, como se puede ver en el último ejemplo.

Nota: He escrito los ejemplos en inglés para no desencajar, porque las cadenas que imprime el módulo están en inglés, aunque estaría bien que pudiera hacerlo en otros idiomas.

blog comments powered by Disqus