2010-07-13 19 views
12

Duplicar posible:
What's the best way to grab/parse command line arguments passed to a Python script?Cómo analizar argumentos de línea de comandos en Python?

Me gustaría ser capaz de analizar los argumentos de línea de comandos en mi programa en Python 2.6.

Idealmente, quiero ser capaz de manejar estos casos:

# Show some help 
./myprogram --help 

# These are equivalent 
./myprogram --block=1 
./myprogram -b 1 

# This means verbose, and twice as verbose: 
./myprogram -v 
./myprogram -vv 

Respuesta

32

Consulte el módulo argparse (o optparse para versiones anteriores de Python).
Tenga en cuenta que argparse/optparse son reemplazos más nuevos y mejores para getopt, por lo que si es nuevo en esto, es la opción recomendada. A partir de los documentos getopt:

Nota El módulo getopt es un analizador para las opciones de línea de comandos cuya API está diseñado para ser familiar para los usuarios de la función() getopt C. Los usuarios que no están familiarizados con la función C getopt() o que desean escribir menos código y obtener mejor ayuda y mensajes de error deberían considerar el uso del módulo argparse en su lugar.

+1

Y por "versiones anteriores de Python", que significa que cada versión que se publicó más de 8 días hace. –

+6

@Forest - shhhh, ¡estamos en el futuro ahora! ;) – tzaman

+3

Y a medida que pasa el tiempo, esta respuesta se vuelve cada vez más correcta. – jcdyer

3

Python tiene argumento procesamiento incorporado, con el módulo de getopt.

Puede manejar formas largas y cortas de argumentos, así como versiones "desnudas" y con parámetros (--help versus --num=7).

Para sus casos de uso específicos (con un poco más), es probable que estaría buscando algo como:

opts,args = getopt.getopt(argv,"b:vVh",["block=", "verbose", "very-verbose", "help"]) 

No estoy seguro de la parte superior de mi cabeza si se permite que múltiples personajes variantes de un solo guión como -vv. Yo solo usaría -v y -V para facilitar mi vida.

1

Una opción mejor que el enlace es el optparse módulos o Getopt, y dependiendo de qué versión de Python que está usando, el más nuevo ones..2.7, y 3.1.2, tener un módulo aún más reciente construido en La documentación en la referencia oficial de python.org tiene un conjunto muy informativo de documentación y ejemplos para esos módulos. Si va a python.org y hace una búsqueda rápida de OptParse o GetOpt, tendrá todo lo que necesita.

1

optfunc es un pequeño módulo interesante. Es genial si quieres escribir rápidamente un pequeño guion. Para cosas más grandes iría con argparse como escribieron otros.

-4

Puede haber una manera mejor, pero yo sólo utiliza sys.argv y poner en condicionales siempre que sea necesario, es decir

if '--v' or '--vv' in sys.argv : 
    print 'verbose message' 
Cuestiones relacionadas