Me preguntaba si hay una manera simple de analizar las opciones de línea de comandos que tienen argumentos opcionales en Python. Por ejemplo, me gustaría poder llamar a un script de dos maneras:

> script.py --foo
> script.py --foo=bar

De los documentos de getopt de Python parece que tengo que elegir uno u otro.

4
Brian Hawkins 22 sep. 2009 a las 22:53

5 respuestas

La mejor respuesta

El módulo optparse de stdlib no lo admite de fábrica (y no debería ser debido a que es una mala práctica usar las opciones de línea de comandos de esa manera).

Como @Kevin Horn señaló puede use el módulo argparse (instalable a través de easy_install argparse o simplemente tome argparse.py y colóquelo en cualquier lugar de su sys.path).

Ejemplo

#!/usr/bin/env python
from argparse import ArgumentParser

if __name__ == "__main__":
    parser = ArgumentParser(prog='script.py')
    parser.add_argument('--foo', nargs='?', metavar='bar', default='baz')

    parser.print_usage()    
    for args in ([], ['--foo'], ['--foo', 'bar']):
        print "$ %s %s -> foo=%s" % (
            parser.prog, ' '.join(args).ljust(9), parser.parse_args(args).foo)

Salida

usage: script.py [-h] [--foo [bar]]
$ script.py           -> foo=baz
$ script.py --foo     -> foo=None
$ script.py --foo bar -> foo=bar
3
Community 23 may. 2017 a las 12:01

Use el paquete optparse.

1
Seth 22 sep. 2009 a las 19:13

No hay una opción en optparse que le permita hacer esto. Pero puedes extenderlo para hacerlo:

http://docs.python.org/library/optparse.html#adding-new-actions

2
Santi 22 sep. 2009 a las 19:15

Echa un vistazo a argparse: http://code.google.com/p/argparse/

Especialmente la opción 'nargs'

3
Kevin Horn 22 sep. 2009 a las 19:13

Además, tenga en cuenta que la biblioteca estándar también tiene optparse, un analizador de opciones más potente.

3
Ned Batchelder 22 sep. 2009 a las 19:12