1
我正在編寫一個使用第三方數學軟件「Maxima」的程序。該程序是一個命令行界面,因此它可以通過我的Java程序與簡單的I/O路由進行通信。我已經想出瞭如何從Java內部運行該程序,並且我已經閱讀了很多關於如何重新配置System.out以及InputStreams/OutputStreams如何工作的內容,但我無法弄清楚如何執行以下操作認爲應該是一個非常簡單的任務):以編程方式與Java中的I/O程序進行交互
- 輸出到千里馬從Java命令,(如字符串「5 + 5;」)
- 檢索千里馬的輸出,並從Java代碼處理它(如可能會打印給定的字符串+「blah」)。
- 輸出另一個命令千里馬從Java ...
- 等
- 下面是代碼,將運行千里馬,讓我與它在Eclipse控制檯
public static void main(final String[] args) {
// An idea I had for manipulaing how the printstream works.
// Set the system.out to be a custom Prinstream.
// final PrintStream interceptor = new Interceptor(origOut);
// System.setOut(interceptor);
// Run the program:
final String programLocation = "\"C:\\Program Files (x86)\\Maxima-sbcl-5.37.2\\bin\\maxima.bat\"";
final ProcessBuilder pb = new ProcessBuilder();
pb.redirectInput(Redirect.INHERIT); // Inherit I/O
pb.redirectOutput(Redirect.INHERIT);
pb.command(programLocation);
try {
// Start the program and allow it to run in Eclipse's/the program's
// console.
pb.start().waitFor();
} catch (final InterruptedException e) {
e.printStackTrace();
} catch (final IOException e) {
e.printStackTrace();
}
}
互動
你應該*不*被重定向輸入和輸出。缺省是能夠獲得進程的輸出,輸入和錯誤流,並能夠寫入和讀取它們 - 通過重定向您將失去該能力。 – RealSkeptic
@RealSkeptic,所以我應該使用像'BufferedReader中R =新的BufferedReader(新的InputStreamReader( \t \t \t \t process.getInputStream()));'創建一個工具,它可以 「讀出」 千里馬的輸出? –
簡而言之,是的。 – RealSkeptic