Вопрос

Чтобы подключить мою настройку немного ближе к «развертыванию одного щелчка», я хотел бы использовать Groovy Scripts для запуска/остановки других процессов, управляемых сценариями BAT, работающих в разных частях файловой системы и даже на разных машинах.

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

Я знаю Java's

java.lang.Runtime's exec()

Однако есть много проблем с этим, и я подумал, есть ли у Groovy какой -то стенография для этого тоже?

Спасибо!

Это было полезно?

Решение

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

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

Другие советы

Метод execute () может использоваться для изменения каталогов, если вы префиксу его с помощью команды «cmd /c», а затем использовать Ampersand (предполагая Windows) для команд цепи вместе.

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

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

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

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

ProcessBuilder позволяет вам

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

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

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

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

def proc = "cmd" .execute ()

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

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

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

Чтобы получить дисплей, который показывает только линию AutoExec.bat. Обратите внимание, что до тех пор, пока вы не вернете True от закрытия, stdin этого процесса доступен, чтобы вы могли отправлять больше строк текста и взаимодействовать с ним на неопределенный срок.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top