【发布时间】:2018-11-07 08:34:15
【问题描述】:
我正在编写一个 Clojure CLI 应用程序,我想允许给它一个命令,这会将人们放入 clojure.main REPL。
有人知道我该怎么做吗?我的努力没有结果。
编辑:
由于我的 CLI 采用管道输入这一事实,我的问题变得更糟。这是我想要工作的一个例子:
(ns playground.core
(:gen-class))
(defn -main
[& args]
(with-open [r (io/reader *in*)]
(doseq [line (line-seq r)]
(println line)))
;; Drop in repl after having read the input and printed its content)
然后我这样称呼它:
cat ./somefile.txt | lein trampoline run
【问题讨论】:
-
我不认为这是重复的,因为该问题没有解决 repl 不需要成为程序输入的第一个消费者并且不需要在程序开始。
-
是的,我的问题是专门试图在 REPL 不是第一个开始的地方得到答案。程序首先启动,接受来自 in 的输入,做更多的事情,然后它需要转换为 REPL。
-
CLI REPL 在标准输入和标准输出上运行,管道也是如此。也许您应该将 nREPL / socket REPL 与 pREPL 一起使用并远程连接?这使您的标准输入为您的文件管道打开,但允许您远程连接 REPL。或者,您可以阅读 stdin then start a REPL,如其他答案中所述。
-
@Olical 我可以走那条路,但问题是,当我加入 repl 时,我已经完成了标准输入。但似乎有关 stdin 的某些东西导致 REPL 在启动后立即关闭。
标签: clojure command-line-interface read-eval-print-loop