【问题标题】:How to call a C++ program from Clojure so that the programs stays open?如何从 Clojure 调用 C++ 程序以使程序保持打开状态?
【发布时间】:2020-06-14 05:23:26
【问题描述】:

假设我想从 Clojure 调用一个 C++ 程序,比如 stockfish。 如果我从终端执行 stockfish,它会保持打开和交互状态,直到命令退出。

但是,如果我从 Clojure 调用,它只会调用一次并关闭它。

我用过 me/conch 包的程序宏,像这样:

    user> (programs stockfish)
    user> (stockfish "uci")
    "Stockfish 030620 64 by T. Romstad ... \nuciok\n"

然后程序停止。我怎样才能让进程保持开放并保持交互,直到我告诉它退出?

【问题讨论】:

    标签: c++ clojure


    【解决方案1】:

    这类问题在 Unix expect 工具中有一个规范的解决方案,例如 Perl 的 Expect 模块中已经复制了该解决方案。也可能有一个 Java 版本的 Expect。如果是这样,它可能是一个更直接的解决方案。

    关于海螺,https://github.com/Raynes/conch 处的README.md 提供了两种调用程序的方式。如您所见,第一种方法很简单,但在关闭程序之前只发送一个标准输入突发。第二种方式更难使用,但是您可以通过写入进程的标准输入随时发送更多输入,并随时通过读取其标准输出来恢复输出。它在标题https://github.com/Raynes/conch#low-level-usage 下。它看起来像是 Java 进程 API 的一个薄包装器,您不妨直接使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2013-11-14
      • 2016-08-14
      • 2015-04-07
      • 2012-07-03
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多