Pregunta
Tengo una función:
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)
Solución
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 la argparse
módulo , podrás normalmente desea comenzar con una función main
(y algo repetitivo que llama). En la función main
, usted querrá crear una ArgumentParser
. Después de eso, tendrá que añadir algunos argumentos.
Para añadir un argumento, se utiliza add_argument
.
parser.add_argument('-x', '--x-center', type=float, required=True)
A continuación, vamos a añadir una opción, -x
, que también tiene una variante opción larga, --x-center
. El type
pasamos a add_argument
le dice que lo requieran ser un float
(y error si no es un flotador válida). También les decimos argparse
que se requiere; si no se proporciona, de 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. Una vez más, 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.
Por último, analizar la línea de comandos con parse_args
. Esto devuelve un objeto que vamos a almacenar.
A continuación, puede acceder a las opciones y argumentos sobre ese objeto args
y hacer cosas relevantes en su programa.