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)
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)
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.
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 –
@VasileiosAntoniou: ¿Estás seguro de eso? ? El código funciona como está para mí, y hacer que su cambio lo rompa. – icktoofay
Sí, estoy seguro pero no importa. ¡Al menos ambos tenemos un código de ejecución! :) –
¿cuál es la pregunta? –