Pregunta

Con el fin de obtener mi configuración un poco más cerca de "un despliegue clic", me gustaría usar scripts maravilloso para iniciar / detener otros procesos controlados por los scripts de murciélago, que se ejecutan en diferentes partes del sistema de archivos e incluso en diferentes máquinas.

Cómo ejecutar estas secuencias de comandos y cómo hacerlo de su directorio de trabajo respectiva?

Yo sé de Java

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?

Gracias!

¿Fue útil?

Solución

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

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

Otros consejos

El método execute () se puede utilizar para cambiar de directorio Si el prefijo con el comando "cmd / c", y luego usar signo (asumiendo Windows) para comandos de cadena juntos.

ejemplo, asumiendo que usted quiere ir al 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.

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

ProcessBuilder le permite

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

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

Si usted no tiene miedo de crear algo de código reutilizable podría crear un objeto que envuelve un proceso .execute (). He creado algo como esto y lo usa regularmente.

Crear un nuevo proceso con:

def proc = "cmd" .Execute ()

Después de que se pueden utilizar "consumeProcessOutput ()" para gestionar la entrada y salida del "proc". Cualquier cosa que usted envíe al que se actuará sobre como si lo hubiera tecleado en una concha, y toda la producción de esa cáscara estará disponible para usted.

Me envolvió 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 vuelva verdadera del cierre, la entrada estándar de ese proceso está disponible para que pueda enviar más líneas de texto e interactuar con él de forma indefinida.

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 directorio de lista rápida con facilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top