为什么在使用lein run命中ENTER(看起来像挂起)后读取行不返回,但是与lein repl一起工作?

Del*_*man 7 clojure leiningen

手头的问题在于,当我运行我的程序时,lein run它会进入(read-line)部分并且我无法摆脱它,这意味着:read-line永远不会返回.

这是相关代码:

(def command (atom ""))

(defn print-prompt []
  (print "prompt> ")
  (flush)
)

(defn ask-for-input []
    (print-prompt)
    (let [x (str (read-line))]
      (println (str "User input: " x))
      (reset! command x)
    )
)
Run Code Online (Sandbox Code Playgroud)

我从未在屏幕上看到"用户输入:"字符串.奇怪的是,如果我运行lein repl并调用(ask-for-input)它然后它正常工作:S

use*_*621 12

尝试lein trampoline运行,它的工作原理.

以下是leiningen FAQ:

问:我无法访问项目中的stdin.

答:这是JVM进程处理方法的限制; 他们都没有正确地暴露stdin.这意味着像read-line这样的函数在大多数情况下都不会按预期工作,尽管repl任务必然包含一个变通方法.您也可以使用trampoline任务在Leiningen退出后启动项目的JVM,而不是将其作为子进程启动.