【问题标题】:Execute multiple commands in command line using Java使用Java在命令行中执行多个命令
【发布时间】:2015-08-26 11:37:15
【问题描述】:

我正在用 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();
}

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

【问题讨论】:

  • 总是第三个命令吗?您是否尝试过其他命令?可以看看this,不知道有没有帮助
  • 顺便说一句,如果您使用这种方法,如果您发现自己难以跟踪错误,则值得阅读以下内容:javaworld.com/article/2071275/core-java/…

标签: java macos terminal communication reader


【解决方案1】:

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

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

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

你必须通过调用Runtime.getRuntime().exec()来执行主命令

然后您必须使用调用Runtime.getRuntime().exec() 返回的Process 的输入流/输出流来写入/读取命令/answers

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

【讨论】:

  • 你能贴一些代码,一个例子,说明我应该如何处理这个问题吗?
  • 你可以在这里找到一个使用 bash shell 的例子stackoverflow.com/questions/3643939/…
  • 如果您发现此答案有用且正确,您可以用绿色检查标记它并投票。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2021-04-26
  • 1970-01-01
  • 2017-06-16
  • 2017-01-26
相关资源
最近更新 更多