如何从 Clojure 调用 C++ 程序以使程序保持打开状态?
Posted
技术标签:
【中文标题】如何从 Clojure 调用 C++ 程序以使程序保持打开状态?【英文标题】:How to call a C++ program from Clojure so that the programs stays open? 【发布时间】: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"
然后程序停止。我怎样才能让进程保持开放并保持交互,直到我告诉它退出?
【问题讨论】:
【参考方案1】:这类问题在 Unix expect
工具中有一个规范的解决方案,例如 Perl 的 Expect 模块中已经复制了该解决方案。也可能有一个 Java 版本的 Expect。如果是这样,它可能是一个更直接的解决方案。
关于海螺,https://github.com/Raynes/conch 处的README.md
提供了两种调用程序的方式。如您所见,第一种方法很简单,但在关闭程序之前只发送一个标准输入突发。第二种方式更难使用,但是您可以通过写入进程的标准输入随时发送更多输入,并随时通过读取其标准输出来恢复输出。它在标题https://github.com/Raynes/conch#low-level-usage 下。它看起来像是 Java 进程 API 的一个薄包装器,您不妨直接使用它。
【讨论】:
以上是关于如何从 Clojure 调用 C++ 程序以使程序保持打开状态?的主要内容,如果未能解决你的问题,请参考以下文章