java中ProcessBuilder
2015-12-22 00:21
465 查看
可以使用java中的ProcessBuilder执行本地命令或脚本等工作:
以下是一个简单的使用java调用本地python脚本的例子。从某工程代码中整理出来的,未封装,仅供参考。
Java代码
List<String> commands=new ArrayList();
commands.add("python");
commands.add(pkg);
commands.add("--ad=test");
//...其它参数添加
processBuilder.command(commands);
processBuilder.directory(path);//切换工作目录
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
StringBuilder result = new StringBuilder();
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
LOGGER.info(processBuilder.command().toString() + " --->: " + line);
}
} catch (IOException e) {
LOGGER.warn("failed to read output from process", e);
} finally {
IOUtils.closeQuietly(reader);
}
process.waitFor();
int exit = process.exitValue();
if (exit != 0) {
throw new IOException("failed to execute:" + processBuilder.command() + " with result:" + result);
} else {
return exit;
}
附:
在JavaSE5之前使用Runtime的exec方法执行本地命令.在JavaSE5之后,可以使用ProcessBuilder执行本地命令.
以下是一个简单的使用java调用本地python脚本的例子。从某工程代码中整理出来的,未封装,仅供参考。
Java代码
List<String> commands=new ArrayList();
commands.add("python");
commands.add(pkg);
commands.add("--ad=test");
//...其它参数添加
processBuilder.command(commands);
processBuilder.directory(path);//切换工作目录
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
StringBuilder result = new StringBuilder();
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
LOGGER.info(processBuilder.command().toString() + " --->: " + line);
}
} catch (IOException e) {
LOGGER.warn("failed to read output from process", e);
} finally {
IOUtils.closeQuietly(reader);
}
process.waitFor();
int exit = process.exitValue();
if (exit != 0) {
throw new IOException("failed to execute:" + processBuilder.command() + " with result:" + result);
} else {
return exit;
}
附:
在JavaSE5之前使用Runtime的exec方法执行本地命令.在JavaSE5之后,可以使用ProcessBuilder执行本地命令.
相关文章推荐
- js实现C#的StringBuilder效果完整实例
- Divide and Conquer:Monthly Expense(POJ 3273)
- Request的getParameter和getAttribute方法的区别
- request.getScheme() 使用方法
- JavaSE的UI界面编程
- CALayer 花瓣飘落 转场动画-CATransation 动画组 UIView动画封装
- iOS - UIImageView
- iOS- UIProgressView
- UI相关基础知识
- BlockQueue使用之简单应用
- UIScrollView,UITableView的简单使用
- Riemann积分和Lebesgue积分角度下一积分不等式的等号成立充要条件的研究
- MySQL提示:The server quit without updating PID file问题的解决办法
- 设置UILabel的行间距
- 关于很简单的设计模式,ui-dao-database,以及JavaBean和util工具类
- 笔记-引导页GuideActivity
- 子线程改变UI线程的方法
- UIScreen的scale属性
- LabVIEW如何将脚本插入Quick Drop
- dispatch_get_current_queue的废弃