Java processbuilder和使用环境变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java processbuilder和使用环境变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1903字,纯文字阅读大概需要3分钟。
内容图文
![Java processbuilder和使用环境变量](/upload/InfoBanner/zyjiaocheng/662/3e62b0feab41448a8ec6d32117db434e.jpg)
我想做的是我想运行一个流程,但是因为该流程本身依赖于环境变量,所以直接调用它会导致流程内的错误.对于那些想知道这是什么的人,它是耙工具.因此,我认为使用bash更好,并且通过bash使用它可以消除此问题.但是,事实并非如此.
这是我的代码:
public static void runPB(String directory) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder(
"/bin/bash");
processBuilder.directory(new File(directory));
Process process = processBuilder.start();
OutputStreamWriter osw = new OutputStreamWriter(process.getOutputStream());
osw.write("rake routes");
osw.close();
printStream(process.getErrorStream());
printStream(process.getInputStream());
}
public static void printStream(InputStream is) throws IOException {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
我知道这是与环境有关的问题,因为这里描述的错误是我所遇到的错误cannot load such file — bundler/setup (LoadError)
此外,我检查了processBuilder.environment()返回的环境变量比输入env少.我继续并更改了osw.write()行,并尝试在其中回显$GEM_HOME,它不打印任何内容,如果我在操作系统bash上执行此操作,那么我会得到路径,我还尝试了其他常见的操作,例如echo $SHELL并以Java代码和bash格式打印外壳位置.
所以我的问题是:
1)为什么我的操作系统的环境变量与ProcessBuilder.environment()方法不同?
2)Process类是否考虑使用ProcessBuilder.environment()给出的环境变量?如果是这样,我们如何从操作系统级别添加缺失的?
解决方法:
1)您在Java进程中看到的变量是从您从中启动Java进程的过程继承的变量.即如果从外壳启动它,它应该具有与外壳相同的变量.您需要在启动Java应用程序之前调查实际设置了哪些变量,以及为什么未在该上下文中设置您期望的变量.
要回答第2部分,是的,该过程将与ProcessBuilder.environment()中的环境一起启动.您可以简单地将内容添加到由ProcessBuilder.environment()返回的地图中,这将扩展运行时环境:
ProcessBuilder pb = new ProcessBuilder("foo");
pb.environment().put("MY_VAR", "foobar");
内容总结
以上是互联网集市为您收集整理的Java processbuilder和使用环境变量全部内容,希望文章能够帮你解决Java processbuilder和使用环境变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。