Откуда классы ProcessBuilder или Runtime получают переменные среды? - PullRequest
0 голосов
/ 19 февраля 2019

Эта ссылка: Понимание Java Process и Java ProcessBuilder содержит предложение о том, что процесс, созданный методом exec, не имеет консоли.

Если я вызываю скрипт на pythonоткуда Java, откуда Process получает переменные окружения?

Как я могу манипулировать / добавлять / удалять переменные окружения, которые используются классом Java Process?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете использовать метод ProcessBuilder.environment(), чтобы получить Map переменных среды.

ProcessBuilder документы утверждают, что:

Возвращает представление карты строк среды этого построителя процессов.Всякий раз, когда создается создатель процесса, среда инициализируется как копия текущей среды процесса (см. System.getenv ()).Подпроцессы, впоследствии запущенные методом start () этого объекта, будут использовать эту карту в качестве своего окружения.

Используя возвращенную карту, вы можете установить свои собственные переменные custon env, которые будут использоваться запущенным вами процессом.

В приведенном ниже примере фрагмента демонстрируется установка переменных env с использованием ProcessBuilder API:

public static void main(String[] args) throws Exception {
     ProcessBuilder pb =
                new ProcessBuilder("cmd.exe", "/C", "echo", "%JAVA_HOME%");
     Map<String, String> env = pb.environment();
     env.put("JAVA_HOME", "c/User/Programs/JDK...");
     Process p = pb.start();
     BufferedReader br  = new BufferedReader(new InputStreamReader(p.getInputStream()));
     String line = "";
     while((line=br.readLine()) != null){
         System.out.println(line);
     }
     try {
         int exitValue = p.waitFor();
         System.out.println("\n\nExit Value is " + exitValue);
     } catch (InterruptedException e) {
            e.printStackTrace();
     }
}
...