java - ProcessBuilder 或 Runtime 类从哪里获取环境变量?

标签 java windows process processbuilder

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

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

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

最佳答案

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

<强> ProcessBuilder 文档指出:

Returns a string map view of this process builder's environment. Whenever a process builder is created, the environment is initialized to a copy of the current process environment (see System.getenv()). Subprocesses subsequently started by this object's start() method will use this map as their environment.

使用返回的映射,您可以设置自己的自定义环境变量,该变量将由您启动的进程使用。

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

关于java - ProcessBuilder 或 Runtime 类从哪里获取环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54759326/

相关文章:

java - 对三个不同的应用程序给予同等的优先级

node.js - 在 Windows 上运行 Node.js 服务器

linux - 如何限制单个专用centos6服务器上的帐户资源使用

c# - 运行太多进程时 Mono 崩溃

java - Android HttpURLConnection Android运行时错误

java - 雅虎通登录

windows - 在 Windows 上通过别名将 git hist 设置为 pretty-print 日志

mysql - 备份和恢复数据库

android - 如何杀死Android应用程序启动的logcat进程?

java - 在参与者层次结构中以原子方式传递可变对象