Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Groovy avanzado

Problema script en gnu/linux

Pablin - miércoles 30/09/2009

Quetal, tengo un script que funciona bajo gnu/linux

el script es mas o menos asi

 

#!/usr/bin/env groovy

def cadena = "unzip archivo.zip"

println cadena

cadena.execute()

 

y asi con 6 archivos

al mandarlo a ejecutar aparentemente esta trabajando pero a la final no extrae nada

aveces funciona, otras veces no extrae todo completo y otras veces no extrae nada.

podría alguien indicarme si tengo algun error?

Muchas gracias

Re: Problema script en gnu/linux

idecasso - jueves 01/10/2009

Revise en los libros, y el problema no es groovy, lo que debe suceder es que tienes los archivos originales en donde se va a descomprimir, entonces como los encuentra el bash debe estar pidiendo que confirmes si vas a sobreescribir, pero a lo mejor es medio complicado enviarle la confirmacion, pero lo solucionas facil escribiendo unzip -o archivo.zip para que sobreescriba sin confirmacion.

#!/usr/bin/env groovy

def cadena = "unzip -o archivo.zip"

println cadena

println cadena.execute().text

 

Le añadi println cadena.execute().text para obtener la salida del proceso.

Re: Problema script en gnu/linux

idecasso - jueves 01/10/2009

Me inquieto poder hacerlo que funcione interactivamente, asi que busque, luego intentar con clases basadas en java, encontre las mejoras que groovy tiene a este respecto.Quedando el script asi

#!/usr/bin/env groovy

def cadena = "unzip archivo.zip"

println cadena

def proc = cadena.execute()

Scanner ent = new Scanner(System.in)

proc.consumeProcessOutput(System.out, System.out)

proc.withWriter { writer ->
    writer << ent.nextLine()
}

proc.waitForOrKill(0)

 

El unico inconveniente es que solo puedes enviar una respuesta... si alguien sabe como averiguar si el proceso sigue ejecutandose, se los agredeceria muchisimo, asi podria integrar  bien con el sistema mis scripts.

Re: Problema script en gnu/linux

Pablin - jueves 01/10/2009
Muchas gracias, bueno comento:
Puse lo que sugiere el compañero:

println cadena.execute().text

pero sorpresa:
mande a ejecutar el script algunas veces
intento 1: no funciona.
intento 2: no funciona.
intento 3: funcionó pero no extrajo todo....
intento 4: no funciona.
intento 5: misteriosamente funcionó!!
intento 6: no funciona.

entre estas pruebas no se modificó el script.

los archivos existen estan ahi. y en las ejecuciones no salió errores.

Ahora mi pregunta es la siguiente:
Una vez tenía un programa en Java que funcionaba pero se quedaba a medias y no salía ningún error.
se solucionó piniendo en el run para la ejecución "-Xms1024m -Xmx2048m" y listo.
el script luego de descomprimir tiene procesos que si requieren recursos de hardware pero despues de descomprimir.
ahora, el script luego de descomprimir elimina otros archivos (eso siempre lo hizo)
pero da problemas al descomprimir como que se salta esas órdenes.
Talvez alguna sugerencia con respecto al problema?
Muchas gracias de ante mano.

Re: Problema script en gnu/linux

idecasso - jueves 01/10/2009

Bueno, yo comprobe con las dos modificaciones que te di, la segunda es mejor por que obtiene los mensajes interactivamente, el problema es que solo te permite dar una entrada, es decir, si elijes renombrar, no puedes meter el nombre del archivo.

El comportamiento extraño que mencionas no me paso a mi, deberias checar las opciones de unzip, tal vez estas pidiendo mas comandos interactivos y ese es parte del problema, por lo que encontre esta salvado como obtener el flujo de salida y de errores desde otro proceso, proc.consumeProcessOutput(System.out, System.out) sirve para eso, el problema es como obtener la entrada de la consola actual y mandarlo hacia la otra consola, tal vez haciendo un hilo nuevo y cuando exista entradas en la consola enviarlo al otro proceso.El problema involucra hilos y flujos :P

Re: Problema script en gnu/linux

idecasso - jueves 01/10/2009

Rayos, y se me olvido decir un pequeño detalle, al script anterior le falta el salto de linea, por que cuando realizamos una entrada presionamos enter, entonces al obtener la entrada con nextLine() nos la devuelve pero no tiene salta de linea, entonces el proceso se queda esperando un salto de linea, por eso puede ser medio aleatorio su funcionamiento. Pero fuera de esto sigue presente el problema de como mandar mas de una entrada interactiva.

#!/usr/bin/env groovy

def cadena = "unzip archivo.zip"

println cadena

def proc = cadena.execute()

Scanner ent = new Scanner(System.in)

proc.consumeProcessOutput(System.out, System.out)

proc.withWriter { writer ->
    writer << "${ent.nextLine()} \n"
}

proc.waitForOrKill(0)

Responder al hilo | Volver al foro "Groovy avanzado" | Volver a los foros