获取长时间运行的进程的输出流



有一个长时间运行的Unix进程,我希望用Clojure捕获和处理它的输出。一个很好的例子是一个reply -y/nREPL会话:它的持续时间是不确定的,输出被打印到stdout。

如果我尝试(clojure.java.io/sh "lein" "repl"),评估将阻塞,直到底层进程完成,并且然后我可以观察输出。

这不是我想要的——我想立即得到一个流。

我可以使用clojure.java实现这一点吗?io或类似的现有Clojure工具?我不介意使用Java。

看一下me. rayness .conch库,它比clojure.java.shell更通用一些。它的低级API似乎是你正在寻找的。

不是一个详细的答案,但是Clojure的sh函数的源代码非常短。如果您稍微修改它以删除.waitFor(或者添加一个高阶函数来消耗InputStreamReader到达时返回的部分读取),您可能会获得进程返回的更新数据。但是要小心死锁,以防子进程也需要输入(如lein repl示例)。

最新更新