Дополнительно
Как перенаправить вывод Process Builder'а в строку?
Я использую следующий код для запуска конструктора процессов. Я хочу знать, как я могу перенаправить его вывод в строку.
56
10
Чтение из
InputStream
. Вы можете добавить вывод вStringBuilder
:Используя Апач Викискладе IOUtils Вы можете сделать это в одну строку:
В Java 8 пример:
Использование:
Я использую этот точный код и он работает хорошо для одного или нескольких результатов. Вы можете добавить обработчик поток ошибок, а также.
Вы можете сделать что-то вроде этого:
Просто добавьте
.inheritIO();
в строку конструктора процесса.IE:
ProcessBuilder pb = new ProcessBuilder(script.sh).inheritIO();
Для Java 7 и 8 это должно работать:
Тогда в ваш код, сделать это:
Я бессовестно украла из: https://stackoverflow.com/questions/16714127/how-to-redirect-process-builders-output-to-a-string
После того, как он пытается справляться с различными делами (работа как поток stderr и stdout и не блокирует любой из этих, остановить процесс после тайм-аута, правильное экранирование слешей, кавычек, специальных символов, пробелов, .... ) Я сдался и нашел Апач Викискладе старпома https://commons.apache.org/proper/commons-exec/tutorial.html вот вроде бы делаешь все эти вещи довольно хорошо.
Я рекомендую всем, кто нуждается, чтобы вызвать внешний процесс в Java, чтобы использовать библиотеки Apache Commons на старпома вместо того, чтобы заново изобретать его.
В Java 8 есть приятная линии() поток можно объединить со строкой.присоединяйтесь и системы.lineSeparator():
Решения
ProcessBuilder РВ = новый ProcessBuilder(системы.метод getproperty("у пользователей.реж и")+" по - /ГРЦ/generate_list.Ш" и, именем);
, раскомментируйте строку и закомментировать:ProcessBuilder processBuilder = новый ProcessBuilder(команды);
.Функциональность
Эхо 1
и возвращает результат как строку.Использование &ампер; проверка
и
binaryCommand[1]="и 1", у;, повторной компиляции и выполнения
.файл jar`.Ограничения
Код
По состоянию на Ява 9, мы, наконец, есть один лайнер: