Невозможно получить полный вывод из groovy execute - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь перечислить содержимое папки svn, которая содержит около 1200 элементов.Вдоль строк в « Выполнить внешнюю программу в скрипте groovy и записать вывод », я разработал следующий код

def svnCommand = "svn list ${repoUrl}"
def sout = new StringBuilder()
def serr = new StringBuilder()

Process sproc = svnCommand.execute()
sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()
println sout

Если я собираюсь запустить этот скрипт, я всегда получаюусеченный вывод, независимо от того, насколько высоко я могу установить начальную емкость.Выходные данные явно усекаются, как показано в следующем фрагменте

...
SS0D76I0.cpy
SS0D76M0.cpy
SS0D76N0.cpy
SS

Есть ли какие-либо предложения о получении полного вывода команды?Сценарий выполняется на коробке Windows.

1 Ответ

0 голосов
/ 11 июня 2018

public void consumeProcessOutput(Appendable output, Appendable error):

Получает выходные данные и потоки ошибок из процесса и считывает их, чтобы предотвратить блокировку процесса из-за полного выходного буфера.Обработанные данные потока добавляются к прилагаемому объекту «Добавляемый».Для этого запускаются два потока, поэтому этот метод будет возвращен немедленно. Потоки не будут объединяться (), даже если вызывается waitFor ().Чтобы дождаться, пока выходные данные будут полностью использованы, вызовите функцию waitForProcessOutput ().

public void waitForProcessOutput()

Получает потоки вывода и ошибок из процесса и считывает ихчтобы предотвратить блокировку процесса из-за полного выходного буфера.Потоковые данные выбрасываются, но исключается блокировка из-за полного выходного буфера. Используйте этот метод, если вы не заботитесь о стандартном выводе или выводе ошибки и просто хотите, чтобы процесс выполнялся без вывода сообщений - используйте его осторожно, потому что, поскольку данные потока выбрасываются, может быть трудно отследитькогда что-то идет не так.Для этого запускаются два потока, но join () ed, поэтому мы ждем.Как следует из названия waitFor ..., мы также ждем, пока не закончим.Наконец, потоки вывода и ошибок закрываются.

public void waitForProcessOutput(Appendable output, Appendable error)

Получает потоки вывода и ошибок из процесса и считывает их, чтобы предотвратить блокирование процесса из-зав полный выходной буфер.Обработанные данные потока добавляются к прилагаемому объекту «Добавляемый».Для этого запускаются два потока, но join () ed, поэтому мы ждем.Как следует из названия waitFor ..., мы также ждем, пока не закончим.Наконец, потоки ввода, вывода и ошибок закрываются.

, поэтому вместо

sproc.consumeProcessOutput(sout, serr)
sproc.waitForProcessOutput()

вызовите

sproc.waitForProcessOutput(sout, serr)
...