Добавление параметров в Runtime.getRuntime ()? - PullRequest
1 голос
/ 31 августа 2010
void restartWeb() {
        try {
            String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"};
            Runtime.getRuntime().exec(command);
        } catch (java.io.IOException err) {
        webServer.logError(err.getMessage());
        }
    }

Почему это не работает? Как я могу это исправить, чтобы он работал так, как я хочу?

- Запускает webRestarter.exe с параметрами >> webLog.log

Так что выглядело бы что-то вроде этого:

webRestarter.exe>>webLog.log

Ответы [ 4 ]

5 голосов
/ 31 августа 2010

Вы просто не можете использовать каналы в вызове exec.Трубы - это функциональность оболочки, а не операционной системы.Поэтому мы должны вызвать исполняемый файл оболочки и передать команду.Попробуйте вместо этого:

String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};
1 голос
/ 31 августа 2010

Если я не ошибаюсь, каналы, перенаправления и т. Д. Являются функцией оболочки. В этом контексте это просто аргументы. Вы могли бы справиться с этим так же просто, как использовать cmd.exe с ключом / c в качестве части вашей команды, я думаю, что он справится с этим правильно или обработает стандартный ввод / вывод самостоятельно (хотя это, как известно, чревато проблемами, я предпочитаю что-то как обыкновенный исполнитель).

1 голос
/ 31 августа 2010

Параметры передаются непосредственно в команду webRestarter.exe. Вы не можете использовать параметры для перенаправления стандартного вывода в файл, как это обычно делает ваш интерпретатор командной строки.

Однако метод exec () возвращает объект Process, который можно использовать для извлечения стандартного вывода и записи его в файл.

Источники:

http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

0 голосов
/ 31 августа 2010

Просто подумал, что упомяну две вещи, которые могут пригодиться для работы с процессами.

  1. ProcessBuilder - это хороший способ получить Process (в коде, предназначенном для запускав 1.5+ JRE).

  2. Рекомендуется внимательно прочитать и реализовать все рекомендации, когда Runtime.exec () не будет .

...