这个链接:Understanding Java Process and Java ProcessBuilder有一句话说exec方法创建的进程没有控制台。
如果我从java调用python脚本,那么Process从哪里获取环境变量?
如何操作/添加/删除Java Process类使用的环境变量?
您可以使用ProcessBuilder.environment()
方法获取环境变量的Map
。
ProcessBuilder
文档指出:
返回此流程构建器环境的字符串映射视图。无论何时创建进程构建器,环境都将初始化为当前进程环境的副本(请参阅System.getenv())。随后由此对象的start()方法启动的子进程将使用此映射作为其环境。
使用返回的映射,您可以设置自己的自定义env变量,这些变量将由您启动的进程使用。
下面的示例代码段演示了使用ProcessBuilder
API设置env变量:
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();
}
}