2014-10-07 2 views
2

Основная цель - установить переменные среды через код Java.Адаптация программных изменений окружающей среды к текущему процессу

Process process = Runtime.getRuntime().exec("export MY_ENV=123"); 

Всегда возвращает новый процесс. Но я хочу, чтобы он выполнялся для текущего процесса. Есть ли способ добавить вывод в текущий процесс?

+1

Смотрите также [Когда Runtime.exec() не будет] (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won -t.html) для многих хороших советов по правильному созданию и обработке процесса. Затем проигнорируйте это, ссылаясь на 'exec' и используйте' ProcessBuilder' для создания процесса. –

+2

Это был ответ [здесь] (http://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java). Не так-то просто изменить весь этот вопрос. Я предлагаю вам вернуться к редактированию. – aioobe

ответ

3

Использование ProcessBuilder

  • inheritIO позволяет подключить потоки начатого процесса с текущим процессом
  • waitFor позволяет дождаться завершения внешнего процесса

Пример:

new ProcessBuilder("/bin/ls").inheritIO() 
          .start() 
          .waitFor(); 
+0

inheritIo() метод работал как шарм !! – shashantrika

0

Process вернулся из exec вызова содержит три потока:

  1. process.getOutputStream() который, если вы пишите, будет «Водопроводной» в обкаткой
  2. process.getInputStream(), который, если читать, будет (выход ls)
  3. process.getErrorStream(), который, если читать, будет содержать стандартный вывод ошибки (сообщения об ошибках от ls, если таковые имеются).

Это ваша ответственность как программист, чтение из этих потоков и вывод их на выход вашей программы, если это то, что вы хотите.

Кроме того, вы должны проверить process.exitValue(), если вы хотите это получить.

это несколько общих для настройки отдельных потоков для мониторинга STDOUT и Stderr потоков