我想在启动后设置通过ProcessBuilder构建的SubProcess的环境变量。以下代码不起作用:在启动过程后更改ProcessBuilder的环境变量
ProcessBuilder pb = new ProcessBuilder("cscript.exe", "test.vbs");
Process p = pb.start();
pb.environment().put("test", "1");
有没有办法做到这一点?
我想在启动后设置通过ProcessBuilder构建的SubProcess的环境变量。以下代码不起作用:在启动过程后更改ProcessBuilder的环境变量
ProcessBuilder pb = new ProcessBuilder("cscript.exe", "test.vbs");
Process p = pb.start();
pb.environment().put("test", "1");
有没有办法做到这一点?
不,你不能那样做。流程生成器环境在启动后是孤立的,不可变的。
两个的ProcessBuilder实例总是包含独立过程环境中,所以返回的地图改变将永远不会被反映在任何其他的ProcessBuilder实例或由System.getenv返回的值。
对此进程生成器的后续修改不会影响返回的进程。
如果你有兴趣在传递信息的过程后启动它,使用OutputStream
的过程和写入。该进程应该从其输入流中读取并处理来自调用者的通信。 More help。
OutputStream os = process.getOutputStream();
// write data to this stream and read it on the other end.
这是不可能的,请参阅ProcessBuilder.start API:...对此进程生成器的后续修改不会影响返回的进程。
可能值得注意的是,这不是“ProcessBuilder”或Java的限制,而是由于操作系统一般工作的性质 - 而且它不能以任何其他方式。 – 2014-12-26 07:43:19