Запуск скрипта из 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")
получите меня быстрый список каталогов с легкостью.