Запуск скрипта из Groovy

чтобы моя настройка была немного ближе к "развертыванию одним щелчком мыши", я хотел бы использовать скрипты groovy для запуска/остановки других процессов, управляемых сценариями bat, работающих в разных частях файловой системы и даже на разных машинах.

Как выполнить эти скрипты и как это сделать с их соответствующий рабочий каталог?

Я знаю Java

java.lang.Runtime's exec()

однако есть много проблем с этим, и я задавался вопросом, Был ли Groovy что-то вроде стенографии для этого?

спасибо!

4 ответов


Groovy добавил метод execute () в обычную старую строку, поэтому попробуйте следующее:

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

метод execute () можно использовать для изменения каталогов, если вы префиксируете его командой "cmd /c", а затем используете амперсанд (при условии Windows) для объединения команд.

пример, предполагая, что вы хотите перейти в подкаталог подкаталог и запустите оттуда пару пакетных файлов:

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

Не уверен, что нет лучшего способа, но это работает.


вы также можете использовать ProcessBuilder, который является удивительно удобным Java-классом, представленным в java 5.

ProcessBuilder позволяет

  • определить рабочий каталог
  • определите, какие переменные среды должен иметь процесс

см.http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html для краткого примера и дополнительной документации.


Если вы не боитесь создавать повторно используемый код, вы можете создать объект, который обертывает .выполняемый процесс. Я создал нечто подобное и использую его регулярно.

создать новый процесс с:

def proc= "cmd".execute ()

после этого вы можете использовать "consumeProcessOutput()" для управления входом и выходом "proc". Все, что вы отправляете ему, будет действовать так, как если бы вы ввели его в оболочку, и все выходные данные этой оболочки будут доступны для вас.

я завернул все это в закрытие, чтобы вы могли это сделать:

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

чтобы получить дисплей, который показывает только autoexec.линия летучая мышь. Обратите внимание, что пока вы не вернете true из закрытия, stdin этого процесса доступен, чтобы вы могли отправлять больше строк текста и взаимодействовать с ним бесконечно.

Я использую его совсем немного, потому что команды, такие как "cd" и "Dir", не работают в windows .execute (), так просто:

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

получите меня быстрый список каталогов с легкостью.