ProcessBuilder, перенаправляющий вывод - PullRequest
3 голосов
/ 13 мая 2011

Я пытаюсь перенаправить вывод процесса, запущенного с помощью ProcessBuilder, используя следующий код

ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Map<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Process p = pb.start();

Но произошел сбой за исключением

Исключение в потоке "main"java.io.IOException: не удается запустить программу "/ myScript >> / myLogFile 2> & 1 <& - &": java.io.IOException: error = 2, такого файла или каталога на java.lang.ProcessBuilder.start нет (ProcessBuilder.java: 460) </p>

Это прекрасно работает, когда я просто передаю "/ myScript"

Скрипт на perl, любые предложения / комментарии о том, почему он не работает?

Я попытался передать все из них как отдельные аргументы, такие как new ProcessBuilder("/myScript",">>","/myLogFile"), он выполняется, но не перенаправляет в файл журнала, а также не принимает envVars.

Ответы [ 2 ]

6 голосов
/ 13 мая 2011

Операторы перенаправления оболочки неизвестны ProcessBuilder.Поместите вашу команду в скрипт оболочки и выполните ее, как показано здесь .В качестве альтернативы используйте bash -c, как показано здесь .

0 голосов
/ 10 апреля 2017

Как вы указали, с Java7 вы можете продолжать использовать ProcessBuilder с единственным исполняемым файлом в качестве параметра и перенаправлять / перехватывать его выходной поток, используя redirectInput() redirectOutput() и redirectError() из ProcessBuilder класса.

...