ProcessBuilder或Runtime类从何处获取环境变量?

时间:2019-02-19 05:21:00

标签: java windows process processbuilder

此链接:Understanding Java Process and Java ProcessBuilder中有一句话说,由exec方法创建的Process不拥有控制台。

如果我正在从Java调用python脚本,那么流程从哪里获取环境变量?

如何处理/添加/删除Java Process类使用的环境变量?

1 个答案:

答案 0 :(得分:1)

您可以使用ProcessBuilder.environment()方法来获取Map的环境变量。

ProcessBuilder 文档指出:

  

返回此流程构建器环境的字符串映射视图。   每当创建流程构建器时,都会初始化环境   到当前流程环境的副本(请参阅System.getenv())。   随后由该对象的start()方法启动的子流程将   将此地图用作他们的环境。

使用返回的地图,您可以设置自己的custon 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();
     }
}