【问题标题】:Where does ProcessBuilder or Runtime classes get the environment variables from?ProcessBuilder 或 Runtime 类从哪里获取环境变量?
【发布时间】:2019-02-19 05:20:59
【问题描述】:

这个链接:Understanding Java Process and Java ProcessBuilder有一句话说exec方法创建的进程没有控制台。

如果我从 java 调用 python 脚本,进程从哪里获取环境变量?

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

【问题讨论】:

  • Javadoc (部分)表示环境,它是从变量到值的系统相关映射。初始值是当前进程环境的副本(参见 System.getenv())。 困惑时应查看 Javadoc。
  • 一般情况下,进程默认继承其父环境,如果需要,可以选择应用更改。

标签: java windows process processbuilder


【解决方案1】:

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

ProcessBuilder 文档声明:

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

使用返回的地图,您可以设置自己的自定义环境变量,这些变量将被您启动的进程使用。

下面的示例 sn-p,演示了使用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();
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多