cmd ejecucion def con *args

Iniciado por winnipu, 19 Abril 2016, 15:26 PM

0 Miembros y 1 Visitante están viendo este tema.

winnipu

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?

tincopasan

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.

winnipu

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.

engel lex

no estoy seguro de donde sacaste que con "*args" podrías... esto se hace así

Código (python) [Seleccionar]
import sys

print "se recibieron", len(sys.argv), "argumentos"

print "los argumentos recibidos fueron"
for i in sys.argv:
  print i
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

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))

tincopasan

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:
Código (python) [Seleccionar]

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.

winnipu

#6
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.

engel lex

antes de hacer la pregunta intentaste hacer un print a sys.argv?
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.