如何从Clojure调用C++程序,以使程序保持打开状态?
How to call a C++ program from Clojure so that the programs stays open?
假设我想调用来自Clojure的C++程序,比如鳕鱼干。 如果我从终端执行鱼干,它会保持打开和交互,直到命令退出。
但是,如果我从 Clojure 打电话,它只会调用它一次并关闭它。
我使用了me/conch包的程序宏,如下所示:
user> (programs stockfish)
user> (stockfish "uci")
"Stockfish 030620 64 by T. Romstad ... nuciokn"
程序停止。我怎样才能让流程保持开放并保持互动,直到我告诉它退出?
这类问题在Unixexpect
工具中有一个规范的解决方案,例如,在Perl的Expect模块中得到了复制。 也可能有一个Java版本的Expect。 如果是这样,这可能是一个更直接的解决方案。
具体到海螺,https://github.com/Raynes/conch 的README.md
提供了两种调用程序的方法。 第一种方法很简单,但正如您所观察到的,在关闭程序之前只发送一次标准输入。 第二种方法将更难使用,但您可以通过写入进程的标准输入随时发送更多输入,并通过从其标准输出读取来随时恢复输出。 它在标题 https://github.com/Raynes/conch#low-level-usage 下。 它看起来像是围绕Java进程API的薄包装器,您也可以直接使用它。
相关文章:
- 如何从Clojure调用C++程序,以使程序保持打开状态?
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 选择"Y"继续后,我的程序一直处于关闭状态
- 程序终止,状态为 -1073741510 在 for 循环的中间,将输入分配给二维数组
- 用于unique_ptr的有状态自定义删除程序
- Windows编程:为什么我们要将lParam转换为CREATESTRUCT来获取应用程序状态
- 检查特定应用程序的窗口是否处于最小化状态
- 如何在Windows C MFC应用程序状态栏中禁用CAP NUM SCRL指示器
- 从基本C/CPP Linux应用程序中展示状态信息
- 程序在cmd中工作,在cygwin中立即以状态127退出,在emacs shell中没有输出
- 我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止
- 信号处理程序和本地状态
- 当应用程序变为活动/非活动状态时获取通知
- 视图状态和应用程序设计
- 程序状态和调试器不一致
- Qt应用程序状态生命周期
- 是否可以冻结和转储程序状态?
- MSVC++6.0:C1509“函数中的异常处理程序状态太多”
- 程序状态的任何变化是否构成可观察的行为?
- 保存程序状态(visualstudio2008)