2013-04-11 68 views
0

我想在启动后设置通过ProcessBuilder构建的SubProcess的环境变量。以下代码不起作用:在启动过程后更改ProcessBuilder的环境变量

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

有没有办法做到这一点?

回答

3

不,你不能那样做。流程生成器环境在启动后是孤立的,不可变的。

两个的ProcessBuilder实例总是包含独立过程环境中,所以返回的地图改变将永远不会被反映在任何其他的ProcessBuilder实例或由System.getenv返回的值。

对此进程生成器的后续修改不会影响返回的进程。

如果你有兴趣在传递信息的过程后启动它,使用OutputStream的过程和写入。该进程应该从其输入流中读取并处理来自调用者的通信。 More help

OutputStream os = process.getOutputStream(); 
// write data to this stream and read it on the other end. 
+0

可能值得注意的是,这不是“ProcessBuilder”或Java的限制,而是由于操作系统一般工作的性质 - 而且它不能以任何其他方式。 – 2014-12-26 07:43:19

2

这是不可能的,请参阅ProcessBuilder.start API:...对此进程生成器的后续修改不会影响返回的进程。