Autor
|
Tema: cmd ejecucion def con *args (Leído 3,856 veces)
|
winnipu
Desconectado
Mensajes: 91
|
Hola a todos. Vereis, bajo windows he creado un .py usando editor de txt con el siguiente codigo: def media(*args): sumatorio = 0 if numero in args: sumatorio+=numero total=sumatorio/len(args) return total Me gustaria poder ejecutar esta funcion desde la consola CMD pero he probado a ejecutarlo desde su directorio asi: c:> nombreprograma.py media(1,2,3,4,5,6) y no me aparece ningun resultado. Es obvio que algo hago mal. Sabeis que?
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
no sé si estoy entendiendo ¿querés llamar a la función desde la línea de comandos cómo un argumento? si querés usar argumentos sería sobre el nombre del archivo y no llamando a la función. así como está es imposible que funcione ni la función ya que nunca la llamas. si estás aprendiendo busca sobre llamar a funciones y sobre pasar argumentos.
|
|
|
En línea
|
|
|
|
winnipu
Desconectado
Mensajes: 91
|
Veras, lo que quiero es llamar desde el cmd de windows a la funcion media(*args) del programa nombreprograma.py introduciendo si es posible los argumentos que yo quiera (una serie de numeros mas o menos grande). Todo ello desde la consola windows, para ver si me arroja el resultado en la misma consola. Es posible? O estoy intentando algo que no se puede hacer? Perdona las dudas extrañas, estoy aprendiendo y se me ocurrio intentar lanzar un programa por consola.
|
|
|
En línea
|
|
|
|
engel lex
|
no estoy seguro de donde sacaste que con "*args" podrías... esto se hace así import sys print "se recibieron", len(sys.argv), "argumentos" print "los argumentos recibidos fueron" for i in sys.argv: print i
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
winnipu
Desconectado
Mensajes: 91
|
Creo que lo he solucionado mejorando el codigo y ejecutandolo desde cmd ahora si que logro ver el resultado por consola y correctamente. Pego el codigo: lista =[]
def media(lista): sumatorio = 0 for numero in lista: sumatorio+=int(numero) total=sumatorio/len(lista) return total
while True: x = input("Introduce un numero o pulsa 0 para terminar: ") if x == "0": break else: lista.append(x)
print ("La media ponderada de los numeros introducidos es igual a:",media(lista))
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
veo que no me diste bola ni tampoco a engel lex ¿en tu nuevo código, dónde está el pase de argumentos para que los haga el script? estoy aburrido y me gusta python por lo tanto modifique un poco tu código para que veas lo que es pasar argumentos: import sys argu= sys.argv argu= argu[1:] lista =[] for arg in argu: arg = int(arg) lista.append(arg) def media(lista): sumatorio = 0 for numero in lista: sumatorio+=int(numero) total=sumatorio/len(lista) return total print ("La media ponderada de los numeros introducidos es igual a: ",media(lista))
para ejecutarlo desde cmd ponés: python script.py 1 2 3 4 5 o sea llamás al compilador el nombre de tu script y los argumentos separados por espacios y listo. salvo que no hayas entendido que es pasar argumentos esa es la forma en que se puede hacer.
|
|
|
En línea
|
|
|
|
winnipu
Desconectado
Mensajes: 91
|
Gracias tincopasan, busque solventar el problema de otro modo, pero tienes razon, tecnicamente lo que hacia yo no era pasar argumentos en linea de comandos, sino pedir datos por consola. Tu codigo me ha ayudado a entender lo que decia engel lex, realmente desconocia el funcionamiento de sys.argv, solo habia leido sobre *args y *kwargs. Disculpa por mi falta de conocimientos. Solo una duda mas cuando codeas estas lineas: argu= sys.argv argu= argu[1:] Sobreentiendo que sys.argv no lista sus miembros desde la posicion 0 como las listas, sino que comienza en la posicion 1? Voy a leer sobre sys.argv porque la verdad es que es totalmente novedoso para mi. Gracias por encauzarme del modo correcto.
Edito: Leyendo sobre el tema he visto porque usas la posicion 1 de sys.argv como si fuese el primer parametro en vez de usar el cero. Por lo que he visto el primer valor del array (sys.argv[0]) es el nombre del archivo (script.py) y a continuación, sys.argv[1] contiene el primer parámetro, en este caso por ejemplo si los argumentos introducidos son 1 2 3 4 5 6 sys.argv[1] equivaldria al string 1, sys.argv[2] al string 2 y asi sucesivamente. Gracias de veras tincopasan y engel lex por orientarme.
|
|
« Última modificación: 20 Abril 2016, 20:39 pm por winnipu »
|
En línea
|
|
|
|
engel lex
|
antes de hacer la pregunta intentaste hacer un print a sys.argv?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
|