可以使用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;
}
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執行本地指令.
一篇不錯的介紹ProcessBuilder的文章:
http://www.cnblogs.com/taven/archive/2011/12/17/2291460.html