clojure - 从使用 clojure 应用程序调用的 clojure 应用程序中获取 *in*
问题描述
因此,在一个 clojure 项目(使用 lein run 启动)中,我调用:
(ProcessBuilder. (into-array ["bash" "-c" "cd some-folder ; lein run"])
在某个文件夹的项目中,有一个带有 (read/line) 的循环,它等待来自父级的输入。
但是,将输入发送到:
^InputStream (.getOutputStream child-process) ; doesn't work.
没有到达 clojure 代码,这是由于 lein 反过来启动了一个进程。如何获取子进程中的 clojure 代码正在侦听的流?
解决方案
我的第一个虽然是“为什么?”。但是,如果必须的话,也许Unix 命名管道会是一个很好的答案。这将创建一个 FIFO 缓冲区,读取器和写入器都将其视为普通文件:
在 Unix 中
命名管道使用文件系统,而不是传统的、未命名的 shell 管道。它是使用mkfifo()
or显式创建mknod()
的,两个独立的进程可以通过名称访问管道——一个进程可以作为读取器打开它,另一个作为写入器打开。
例如,可以创建一个管道并设置 gzip 来压缩通过管道传输的内容:
mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &
在一个单独的进程外壳中,可以独立地发送要压缩的数据:
cat file > my_pipe
命名管道可以像任何文件一样被删除:
rm my_pipe
另一个答案是作者使用命名文件(可能在 中/tmp
)为子进程写入输入数据。或者,您可以让父进程和子进程通过套接字进行通信,也许来回发送序列化的 EDN 数据。
推荐阅读
- indexing - nomencl 乳胶不会显示输出
- html - 如何使用语义技术在块上划分标题:例如:标题包含:徽标图像,搜索......?
- php - php7.2.11 - pthreads-unable-to-initialize-module-in-windows-10
- python - Python Proton 将二进制数据发送到 Active MQ
- node.js - node.js 新手发现可能的 PATH 变量错误
- rocksdb - Rocksdb:使用唯一指针关闭数据库时断言“last_ref”失败
- r - 如何在统计测试中/之前以科学计数法显示数字?
- c++ - 子进程退出后内核复制 CoW 页面
- javascript - 想要将嵌套对象转换为查询参数以附加到 url
- python - 为什么对同一个函数有这么多的调用?