首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从clojure应用程序调用的clojure应用程序中获取*in*

从clojure应用程序调用的clojure应用程序中获取*in*
EN

Stack Overflow用户
提问于 2018-04-30 05:24:39
回答 1查看 64关注 0票数 1

因此,在clojure项目(使用lein run启动)中,我调用:

代码语言:javascript
复制
(ProcessBuilder. (into-array ["bash" "-c" "cd some-folder ; lein run"])

在某个文件夹的项目中,有一个循环(read/line),它等待来自父文件夹的输入。

但是,将输入发送到:

代码语言:javascript
复制
^InputStream (.getOutputStream child-process) ; doesn't work.

没有到达clojure代码,这是由于lein依次启动了一个进程。如何获得子进程中的clojure代码正在侦听的流?

EN

回答 1

Stack Overflow用户

发布于 2018-04-30 05:39:58

我的第一个想法是“为什么?”但是,如果一定要这样做,也许Unix named pipe会是一个很好的答案。这会创建一个FIFO缓冲区,读取器和写入器都将其视为普通文件:

在Unix中

命名管道使用文件系统,而不是传统的未命名shell管道。它是使用mkfifo()mknod()显式创建的,两个单独的进程可以按名称访问管道-一个进程可以作为读取器打开它,另一个进程作为写入器打开它。

例如,可以创建一个管道并设置gzip来压缩通过管道传输到该管道的内容:

代码语言:javascript
复制
 mkfifo my_pipe
 gzip -9 -c < my_pipe > out.gz &

在单独的进程shell中,可以独立地发送要压缩的数据:

代码语言:javascript
复制
cat file > my_pipe

可以像删除任何文件一样删除命名管道:

代码语言:javascript
复制
rm my_pipe

另一种解决方案是让编写器使用一个命名文件(可能是/tmp)来写入子进程的输入数据。或者,您可以让父进程和子进程通过套接字进行通信,可能会来回发送序列化的EDN数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50091468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档