2011-12-02 20 views
13

Tengo una función:Python 2.7 argparse

def x(a,b,c)

¿Cómo puedo recoger los valores de variables desde la línea de comandos que se ajustan a este patrón?

python test.py --x_center a --y_center b c (c tiene, por ejemplo, 3, 4 o más valores)

+1

¿cuál es la pregunta? –

Respuesta

39

Puede hacer algo así como esto:

import argparse 

def x(x_center, y_center, values): 
    print "X center:", x_center 
    print "Y center:", y_center 
    print "Values:", values 

def main(): 
    parser = argparse.ArgumentParser(description="Do something.") 
    parser.add_argument('-x', '--x-center', type=float, required=True) 
    parser.add_argument('-y', '--y-center', type=float, required=True) 
    parser.add_argument('values', type=float, nargs='*') 
    args = parser.parse_args() 

    x(args.x_center, args.y_center, args.values) 

if __name__ == '__main__': 
    main() 

Pruébelo:

$ python test.py --x-center 1 --y-center 2 3 4 5 
X center: 1.0 
Y center: 2.0 
Values: [3.0, 4.0, 5.0] 

Para usar the argparse module, normalmente querrá comenzar con una función main (y un repetitivo que la llame). En la función main, querrá create an ArgumentParser. Después de eso, querrás agregar algunos argumentos.

Para agregar un argumento, usa add_argument.

parser.add_argument('-x', '--x-center', type=float, required=True) 

aquí, estamos añadiendo una opción, -x, que también tiene una variante opción larga, --x-center. El type que pasamos al add_argument le dice que requiera que sea un float (y un error si no es un valor flotante válido). También le informamos al argparse que es obligatorio; si no se proporciona, error.

parser.add_argument('values', type=float, nargs='*') 

Esto es igual que antes, pero ya que la cadena se pasa a ella no comienza con un guión, se supone que no es una opción, sino más bien un argumento que no es opción. De nuevo, le decimos que queremos float s. nargs le permite especificar que se necesita más de un argumento. * especifica que queremos cualquier cantidad de argumentos.

Finalmente, analizamos la línea de comando con parse_args. Esto devuelve un objeto que almacenaremos.

A continuación, puede acceder a las opciones y argumentos en ese objeto args y hacer cosas relevantes en su programa.

+0

Línea x (args.x_center, args.y_center, args.values) tiene que cambiar a x (args.x, args.y, args.values) para ejecutar correctamente –

+0

@VasileiosAntoniou: ¿Estás seguro de eso? ? El código funciona como está para mí, y hacer que su cambio lo rompa. – icktoofay

+0

Sí, estoy seguro pero no importa. ¡Al menos ambos tenemos un código de ejecución! :) –