Изменение переменных среды ProcessBuilder после запуска процесса

Я хочу установить переменные среды подпроцесса, созданного с помощью ProcessBuilder, после его запуска. Следующий код не работает:

ProcessBuilder pb  = new ProcessBuilder("cscript.exe", "test.vbs");
Process p = pb.start();
pb.environment().put("test", "1");

Есть ли способ сделать это?


person Simiil    schedule 11.04.2013    source источник


Ответы (2)


Нет, ты не можешь этого сделать. Среды построителя процессов изолированы и не могут быть изменены после их запуска.

Два экземпляра ProcessBuilder всегда содержат независимые среды процесса, поэтому изменения в возвращенной карте никогда не будут отражены ни в каком другом экземпляре ProcessBuilder, ни в значениях, возвращаемых System.getenv.

Последующие изменения этого построителя процессов не повлияют на возвращенный процесс.

Если вы заинтересованы в передаче информации процессу после его запуска, используйте OutputStream для процесса и напишите ему. Процесс должен читать из своего входного потока и обрабатывать сообщение от вызывающей стороны. Дополнительная помощь.

OutputStream os = process.getOutputStream();  
// write data to this stream and read it on the other end.
person Deepak Bala    schedule 11.04.2013
comment
Возможно, стоит отметить, что это не ограничение ProcessBuilder или Java, а то, что это связано с природой работы операционных систем в целом - и по-другому быть не может. - person Christian Hujer; 26.12.2014

Это невозможно, см. ProcessBuilder.start API: ... Последующие изменения в этом построителе процессов не повлияют на возвращаемый процесс.

person Evgeniy Dorofeev    schedule 11.04.2013