【发布时间】:2014-08-28 06:27:48
【问题描述】:
我已经为这个问题苦苦挣扎了一段时间,但我似乎无法解决它。我已经尝试ProcessBuilder 在 linux 终端上执行自定义命令,但它不起作用
实际上我有两个.sh 文件setProto.sh and setTls.sh 用于设置环境的文件。所以为了执行命令,我需要先为每个linux终端实例运行这两个文件。只有这样我们才能能够在应该运行 .sh 文件的 Linux 终端的同一实例上运行自定义命令 anloss。由于某种原因,我无法使其工作我的代码中的错误是什么?这是代码。
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.ProcessBuilder.Redirect;
public class EngineTest {
public static void main(String[] args) {
try {
ProcessBuilder builder = new ProcessBuilder(
"/. setProto.sh",
"/. setTls.sh",
"/anloss -i ${TOOL_INPUT}/census_10000_col5.csv -d ${TOOL_DEF}/attr_all_def.txt -q k=14,dage=2 -g ${TOOL_RES}/census_100_col8_gen.csv");
builder.directory(new File(System.getenv("HOME") + "/PVproto/Base"));
File log = new File("log");
builder.redirectErrorStream(true);
builder.redirectOutput(Redirect.appendTo(log));
Process process = builder.start();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = "";
String output = "";
while ((line = bufferedReader.readLine()) != null) {
output += line + "\n";
}
System.out.println(output);
int exitValue = process.waitFor();
System.out.println("\n\nExit Value is " + exitValue);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
【问题讨论】: