Мне нужно выполнить внешнее приложение, которое возвращает большие данные (требуется более 2 часов для завершения) nand, который непрерывно выводит данные.Выполнение внешней программы с помощью построителя процессов или apaw commons exec
Что мне нужно сделать, это выполнить эту программу асинхронно и захватить вывод в файле. Я пробовал использовать java process builder, однако он, кажется, зависает и возвращает выход только тогда, когда программа завершена или принудительно завершена.
Я попытался использовать построитель процессов и раздвинул новый поток, чтобы захватить вывод, но все равно это не помогло.
Затем я прочитал об apache commons exec и попробовал то же самое. Однако это также, кажется, занимает много времени и возвращает различные коды ошибок (для того же входа)
CommandLine cmdLine = new CommandLine("/opt/testsimulator");
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
PumpStreamHandler psh = new PumpStreamHandler(stdout);
ExecuteWatchdog watchdog = new ExecuteWatchdog(60*1000);
Executor executor = new DefaultExecutor();
executor.setStreamHandler(psh);
executor.setWatchdog(watchdog);
try {
executor.execute(cmdLine);
} catch (ExecuteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Любая помощь или рабочие примеры whould быть очень полезным
Запускает программу из Java жесткое требование? Мне кажется, вы должны просто выполнить команду из оболочки и канала, которая будет выводиться в ваш целевой файл. – Perception
Я сделал это с помощью ProcessBuilder, заботясь о том, чтобы обрабатывать входной поток и поток ошибок, и проблем не было. Возможно, у вас есть ошибка в вашей программе. –
Не забудьте принять ответ ниже, если он вам поможет. – Gray