следующий код:
def p = "ls -la".execute()
def err = new StringBuffer()
def out = new StringBuffer()
p.waitForProcessOutput(out, err)
p.waitForOrKill(5000)
int ret = p.exitValue()
// optionally check the exit value and err for errors
println "ERR: $err"
println "OUT: $out"
// if you want to do something line based with the output
out.readLines().each { line ->
println "LINE: $line"
}
основан на Linux, но переводится в Windows, просто заменив ls -la
на вызов файла bat cmd /c C:\\Script\\S1.bat
.
Это выполняет процесс, вызывает waitForProcessOutput , чтобы убедиться, что процесс не блокируется, и что мы сохраняем потоки stdout и stderr процесса, а затем ждем, пока процесс завершит использование waitForOrKill .
После waitForOrKill
процесс либо был прерван, потому что он занял слишком много времени, либо завершился нормально. В любом случае, переменная out
будет содержать выходные данные команды. Чтобы выяснить, была ли ошибка во время выполнения файла bat, вы можете проверить переменные ret
и err
.
Я выбрал waitForOrKill
тайм-аут наугад, настройте в соответствии с вашими потребностями. Вы также можете использовать waitFor
без тайм-аута, который будет ожидать завершения процесса, но обычно лучше установить некоторый тайм-аут, чтобы ваша команда не выполнялась бесконечно.