Frage

Um mein Setup etwas näher an "One -Click -Bereitstellung" zu bringen, möchte ich groovige Skripte verwenden, um andere Prozesse zu starten/zu stoppen, die von Fledermausskripten gesteuert werden, die in verschiedenen Teilen des Dateisystems und sogar auf verschiedenen Maschinen ausgeführt werden.

Wie man diese Skripte ausführt und wie man es macht ihr jeweils Arbeitsverzeichnis?

Ich kenne Javas

java.lang.Runtime's exec()

Es gibt jedoch viele Probleme damit und ich habe mich gefragt, ob Groovy auch dafür eine Art Abkürzung hatte.

Vielen Dank!

War es hilfreich?

Lösung

Groovy fügte eine execute () -Methode hinzu, um alte Zeichenfolge zu machen. Versuchen Sie also Folgendes:

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

Andere Tipps

Mit der Methode execute () kann es verwendet werden, um Verzeichnisse zu ändern, wenn Sie sie mit dem Befehl "cmd /c" vorfixieren und dann Ampersand (Annahme Windows) zusammenfassen, um Befehle zusammenzubringen.

Beispiel unter der Annahme, dass Sie zum Unterverzeichnis gehen möchten Subdir und führen Sie einige Batch -Dateien von dort aus:

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

Ich bin mir nicht sicher, ob es keinen besseren Weg gibt, aber das funktioniert.

Sie können auch ProcessBuilder verwenden, einer überraschend verängstigten Java -Klasse, die in Java 5 eingeführt wird.

ProcessBuilder lässt Sie

  • Bestimmen Sie das Arbeitsverzeichnis
  • Bestimmen Sie, welche Umgebungsvariablen der Prozess haben sollte

Sehen http://download.oracle.com/javase/1.5.0/docs/api/java/lang/processbuilder.html für ein kurzes Beispiel und mehr Dokumentation.

Wenn Sie keine Angst davor haben, einen wiederverwendbaren Code zu erstellen, können Sie ein Objekt erstellen, das einen .execute () -Prozess wickelt. Ich habe so etwas erstellt und es regelmäßig benutzt.

Erstellen Sie einen neuen Prozess mit:

def proc = "cmd" .execute ()

Danach können Sie "ConsumeProcessOutput ()" verwenden, um die Eingabe und Ausgabe von "Proc" zu verwalten. Alles, was Sie daran senden, wird so reagiert, als hätten Sie sie in eine Hülle eingetippt, und der gesamte Ausgang dieser Hülle steht Ihnen zur Verfügung.

Ich habe das alles in einen Verschluss eingeschlossen, damit Sie dies tun können:

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

Um ein Display zu erhalten, das nur die autoexec.bat -Linie anzeigt. Beachten Sie, dass der Stdin dieses Vorgangs bis Sie aus dem Verschluss true, sodass Sie mehr Textzeilen senden und auf unbestimmte Zeit mit ihm interagieren können.

Ich benutze es ziemlich viel, weil Befehle wie "CD" und "Dir" in Windows nicht mit .execute () funktionieren, also einfach:

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

Ich werde mir mit Leichtigkeit eine kurze Verzeichnisliste bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top