创建此函数以输入unix命令并输出该unix命令的输出。但是,我使用的unix命令遇到了问题。 “ls”用于输出文件列表,但如果我执行“ls -lart”则输出null。无法进一步调试或为什么这不起作用。代码如下。
private String[] unixCommand (String command, Boolean boolOutput) throws IOException, InterruptedException{
Process run;
int i = 0;
String output = "";
String[] finalOutput = new String[1000];
sendToProcessView("Unix Command: " + command);
run = Runtime.getRuntime().exec(command);
run.waitFor();
sendToProcessView("In Unix Command");
if (boolOutput == true){
sendToProcessView("In Output Mode of Unix Command");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(run.getInputStream()));
sendToProcessView("Passed Buffer Reader");
while ((output = stdInput.readLine()) != null) {
sendToProcessView("Output: " + output);
finalOutput[i] = output;
i++;
}
}
return finalOutput;
}
答案 0 :(得分:1)
当与控制台交互时,你应该执行控制台本身,然后使用Process输入流来发送命令,例如(伪代码 - 我没有设置为从我的位置测试java代码,抱歉)
sendToProcessView("Unix Command: " + command);
run = Runtime.getRuntime().exec("bash");
PrintStream in = new PrintStream(run.getOutputStream());
in.println("ls -lart");
然后,您可以通过发送“退出”并按原样读取结果或使用线程监听器(如DataFetcher
来关闭进程。