2009-08-26 55 views
6

Para acercar mi configuración a la "implementación de un clic", me gustaría usar scripts increíbles para iniciar/detener otros procesos controlados por scripts bat, ejecutándose en diferentes partes del sistema de archivos y incluso en diferentes máquinas.Ejecutando un script de Groovy

¿Cómo ejecutar estos scripts y cómo hacerlo desde su directorio de trabajo respectivo?

Sé de

java.lang.Runtime's exec() 

Sin embargo, hay un montón de problemas con esto y me preguntaba si Groovy tenía una especie de taquigrafía para esto también Java?

Gracias!

Respuesta

11

maravilloso agregó un método execute() a la vieja cadena sencilla, así que pruebe esto:

println "ls -la".execute().text 
+0

Todavía no estoy seguro de cambiar el directorio de trabajo. –

+0

¡Gracias hasta ahora! ¡Me gusta mucho! – raoulsson

9

El método execute() se puede utilizar para cambiar de directorio Si el prefijo con el comando "cmd/c" , y luego use ampersand (suponiendo que Windows) para encadenar comandos juntos.

ejemplo, asumiendo que usted quiere ir a subdirectorio subdirectorio y ejecutar un par de archivos por lotes a partir de ahí:

println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text 

No estoy seguro si no hay una mejor manera, pero esto funciona.

1

Puede también utilizar ProcessBuilder que es una clase Java sorprendentemente práctico introducido en Java 5.

ProcessBuilder le permite

  • determinar el directorio de trabajo
  • determinar qué variables del medio ambiente el proceso debe tener

Consulte http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html para obtener un breve ejemplo y más documentación.

+0

Yo en segundo lugar. Aquí hay [una publicación de blog] (http://www.joergm.com/2010/09/executing-shell-commands-in-groovy/) que combina Groovy y ProcessBuilder – FabienB

0

Si no tiene miedo de crear algún código reutilizable, podría crear un objeto que envuelva un proceso .execute(). Creé algo como esto y lo uso regularmente.

crear un nuevo proceso con:

def proc = .execute "cmd"()

Después de que se puede utilizar "consumeProcessOutput()" para gestionar la entrada y salida del "proc". Todo lo que envíes se procesará como si lo hubieras escrito en un intérprete de comandos, y toda la salida de ese intérprete de comandos estará disponible para ti.

que envuelve todo esto en un cierre de modo que usted puede hacer esto:

 
cmd("cd \\ \n dir ") { 
    if(it.contains("AUTOEXEC.BAT")) 
     println it; 
    return true; 
} 

Para obtener una pantalla que muestra sólo la línea autoexec.bat. Tenga en cuenta que hasta que se vuelva verdadero desde el cierre, la rutina de ese proceso está disponible para que pueda enviar más líneas de texto e interactuar con él indefinidamente.

lo uso bastante porque comandos como "CD" y "Dir" no funcionan en ventanas con .execute(), por lo que un simple:

 
def directoryListing=cmd("cd\\\ndir") 

me va a obtener un listado de directorios rápida con facilidad.

Cuestiones relacionadas