ProcessBuilder перенаправлен на стандартный вывод - программирование
Подтвердить что ты не робот

ProcessBuilder перенаправлен на стандартный вывод

Я хотел бы перенаправить выход java-процесса в стандартный вывод родительского Java-процесса.

Использование класса ProcessBuilder следующим образом:

public static void main(String[] args) {
  ProcessBuilder processBuilder = new ProcessBuilder("cmd");
  processBuilder.directory(new File("C:"));   
  processBuilder.redirectErrorStream(true); // redirect error stream to output stream
  processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}

Я бы ожидал, что выходы "cmd", которые похожи на:

Microsoft Windows [версия 6.1.7601] Copyright (c) 2009 Корпорация Microsoft. Tous droits réservés.

отображаются на консоли DOS, используемой для запуска java-программы. Но ничего не отображается вообще в консоли DOS.

В других дискуссиях я видел решения, использующие класс BufferedReader: но здесь я хотел бы, чтобы выходы процесса отображались непосредственно на стандартном выходе, без использования BufferedReader или "while reading loop". Возможно ли это?

Спасибо.

4b9b3361

Ответ 1

Попробуйте ProcessBuilder.inheritIO() использовать один и тот же ввод-вывод в качестве текущего процесса Java. Кроме того, вы можете цепочку daisy:

ProcessBuilder pb = new ProcessBuilder("cmd")
    .inheritIO()
    .directory(new File("C:"));
pb.start();

Ответ 2

Вы пропустили ключевой кусок, вам действительно нужно начать свой процесс и дождаться выхода. Я считаю, что это сработает,

processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
// Start the process.
try {
  Process p = processBuilder.start();
  // wait for termination.
  p.waitFor();
} catch (IOException e) {
  e.printStackTrace();
} catch (InterruptedException e) {
  e.printStackTrace();
}