在clojure中,sh被卡住了

发布于 2025-01-07 17:16:41 字数 285 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伤痕我心 2025-01-14 17:16:41

问题在于 sh 使用 futures 和 Clojure 程序,这些程序使用 futures 或代理,由于某些内部机制的工作方式而无事可做时,它们会在退出之前停留一段时间。

要解决这个问题,请

(shutdown-agents)

在脚本末尾添加,这将终止该机器。 (因此,它的作用超出了名称承诺,因为期货也会受到影响。)

请注意,这无法撤消,因此不应在 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

(shutdown-agents)

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文