我想在启动后设置通过 ProcessBuilder 构建的 SubProcess 的环境变量。以下代码不起作用:
ProcessBuilder pb = new ProcessBuilder("cscript.exe", "test.vbs");
Process p = pb.start();
pb.environment().put("test", "1");
有没有办法做到这一点?
我想在启动后设置通过 ProcessBuilder 构建的 SubProcess 的环境变量。以下代码不起作用:
ProcessBuilder pb = new ProcessBuilder("cscript.exe", "test.vbs");
Process p = pb.start();
pb.environment().put("test", "1");
有没有办法做到这一点?
不,你不能那样做。进程构建器环境在启动后是隔离的并且不可变。
两个 ProcessBuilder 实例始终包含独立的流程环境,因此对返回映射的更改将永远不会反映在任何其他 ProcessBuilder 实例或 System.getenv 返回的值中。
对此流程构建器的后续修改不会影响返回的流程。
如果您有兴趣在启动进程后将信息传递给进程,请使用OutputStream
进程并写入。该进程应从其输入流中读取并处理来自调用者的通信。更多帮助。
OutputStream os = process.getOutputStream();
// write data to this stream and read it on the other end.
不可能的,看ProcessBuilder.start API:... 后续修改这个流程构建器不会影响返回的流程。