在clojure中,sh被卡住了
我正在尝试使用 clojure.java.shell 中的 sh 。在 REPL 中,它工作正常,但在脚本中,它会卡住。
(ns tutorial.shell
(:use clojure.java.shell))
(println (:out (sh "ls" )))
我应该解决什么问题?
I am trying to use sh from clojure.java.shell. In the REPL
, it works fine but from a script, it gets stuck.
(ns tutorial.shell
(:use clojure.java.shell))
(println (:out (sh "ls" )))
What should I fix?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题在于
sh
使用 futures 和 Clojure 程序,这些程序使用 futures 或代理,由于某些内部机制的工作方式而无事可做时,它们会在退出之前停留一段时间。要解决这个问题,请
在脚本末尾添加,这将终止该机器。 (因此,它的作用超出了名称承诺,因为期货也会受到影响。)
请注意,这无法撤消,因此不应在 REPL 中使用。
The problem is that
sh
uses futures and Clojure programs which use futures or agents hang around a bit before quitting when they have nothing more to do due to how some internal machinery works.To get around this, add
at the end of your script, which terminates that piece of machinery. (So it does more than the name promises in that futures are also affected.)
Note that this cannot be undone and therefore should not be used at the REPL.