自从我从Clojure 1.12 RC开始使用clojure.java.process以来,我一直觉得这个功能直接内置到clojure中真是太好了。
我经常发现自己需要一个完全交互的过程,它会在退出时阻塞。例如
(require '[clojure.java.process :as p])
(let [p (p/start
{:in :inherit
:out :inherit
:err :inherit}
"bash")]
@(p/exit-ref p))
将您的repl变成bash shell是一个极端(但通常很有用)的例子。更常见的情况是,你可能只想调用一个有yes或no提示的脚本。在开发和repl使用过程中,这也有助于便利地处理一些意外的用户输入提示,你现在可以直接在repl中回答。
为clojure.java.process命名空间添加一些支持这种方法的手段是否值得考虑?
相关内容
当然,我可以很容易地使用自己的辅助函数,或者简单地使用babashka.process。但我认为,如果以出厂设置提供这种便利性的支持,可能会带来很多“物有所值”的效果。
相反的观点是,这可能是可以添加到该命名空间中的众多事物之一。人们的方式有很多,显然clojure.java.process不应该试图最大化对每一种可能的交互都提供便利性。