使用Java在命令行中执行多个命令

时间:2015-08-26 11:37:15

标签: java macos terminal communication reader

我正在使用Java编写国际象棋程序。要计算最佳移动(当一个人与计算机对战时),我使用UCI(通用国际象棋界面)。这是一个终端应用程序(我使用Mac OS X)。使用Java我想执行一些命令以获得最佳移动。这就是我现在所拥有的:

String[] commands = {"/Users/dejoridavid/Desktop/stockfish-6-64", "isready", "uci"};
Process process = null;
try {
    process = Runtime.getRuntime().exec(commands);
} catch (IOException e) {
    e.printStackTrace();
}

BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

// read the output from the command
String s;
try {
    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }
} catch (IOException e) {
    e.printStackTrace();
}

数组中的第一个命令调用终端应用程序。第二个和第三个都是应用内命令。现在我有一个问题。只执行前两个命令,其结果将打印在控制台中,第三个命令将被忽略。我做错什么了吗?请告诉我如何执行第三个(或更多,第4个,第5个等)命令。

1 个答案:

答案 0 :(得分:1)

您无法使用Runtime.getRuntime().exec()在其他程序中执行命令。 传递给exec方法的数组将数组的第一个元素作为命令,其他元素作为命令的参数。

来自公共Process exec(String[] cmdarray) throws IOException

的javadoc
  

参数:cmdarray - 包含调用及其命令的命令的数组   参数。

您必须通过调用Runtime.getRuntime().exec()

来执行主命令

然后你必须使用调用Process

返回的Runtime.getRuntime().exec()的输入流/输出流来编写/读取命令/答案

要检索流程的输入流和输出流,请使用流程对象上的getInputStream()getOutputStream()方法