Lo + Leído
Eventos destacados
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:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Groovy avanzado
Problema script en gnu/linux
Pablin - miércoles 30/09/2009Quetal, 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/2009Me 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/2009Puse 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/2009Bueno, 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/2009Rayos, 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)
Un momento...
Re: Problema script en gnu/linux
idecasso - jueves 01/10/2009Revise 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.