我一直在努力一段時間,現在有了這個問題,我似乎無法修復它。我曾嘗試ProcessBuilder
的Linux終端上執行的自定義命令,但它不工作用java中的進程生成器在linux上執行海關命令
其實我有兩個.sh
文件setProto.sh and setTls.sh
文件,它是用來設置environment.So用於執行命令,我需要先對運行這兩個文件每一個linux終端的實例。只有這樣我們才能夠運行自定義命令anloss
在其中.sh文件應該運行的linux終端的同一實例上。由於某種原因,我無法使它工作什麼是錯誤在我的代碼?這是代碼。
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();
}
}
}
/。如果你看到我的代碼,我已經添加了builder.directory(新文件(System.getenv(「HOME」)+「/ PVproto/Base」));這是所有腳本和命令必須運行的路徑。如果我犯了任何錯誤,請告訴我。 – henrycharles
我已經嘗試過你的方式,但它的拋出錯誤「cannnot run program/bash/bin」(in directory「/ home/cloudera/PVproto/Base」):error = 2,沒有這樣的文件或目錄 – henrycharles
該程序被稱爲' bin/bash'(* not */bash/bin),如果它是Linux,必須在那裏。你也可以使用'/ bin/sh'。 – laune