我有一個以交互方式在shell中工作的計算機代數程序(稱爲Reduce):在shell中啓動Reduce,然後可以定義變量,計算這個和那個以及不。 Reduce將輸出打印到外殼中。我的想法是,我想爲這個基於文本的程序構建一個前端,用於評估其輸出並將其轉換爲一個很好的LaTeX樣式公式。爲此,我想使用Java。通過Java控制命令行程序會話
我可以通過exec()啓動Reduce。但是,我怎樣才能模擬輸入到打開的shell的文本,以及如何讀回Reduce寫入shell的內容?
感謝 延
編輯1:目前代碼
// get the shell
Runtime rt = Runtime.getRuntime();
// execute reduce
String[] commands = {"D:/Programme/Reduce/reduce.com", "", ""};
Process proc = null;
try {
proc = rt.exec(commands);
} catch (Exception e) {
System.out.println("Error!\n");
}
// get the associated input/output/error streams
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedWriter stdOutput = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
try {
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
} catch (Exception e) {
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
try {
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} catch (Exception e) {
}
謝謝,但我在Java文檔中找不到類StreamGobblerSb。我在哪裏可以找到它? – Jens
@Jens:哦,對不起,這些只是我的Runnable類來處理流。您需要創建自己的Runnable來處理後臺線程中的Streams。 –
好的,那麼這裏只是提到的StreamGobbler類? http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html。我想我意識到我需要線程,上面編輯1的代碼在成功啓動應用程序後掛起。 – Jens