我已经在 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 是一个极端(但常常很有用)的例子。更常见的情况是,您可能只想调用一个有是或否提示的脚本。在开发和 repl 使用期间,这也是一个方便的默认选择,当您遇到未预料到的用户输入提示时,现在可以直接在 repl 中回答。
在 clojure.java.process 命名空间中添加支持这种功能是否值得?
相关
当然,我可以轻易地使用自己的辅助函数来做到这一点,或者直接使用 babashka.process。但我主张,默认情况下方便地支持这种用法可能会带来很大的价值。
相反的观点是,这是可以添加到该命名空间中的许多事物之一。人们可能以无数种方式与进程一起工作,显然 clojure.java.process 不能试图最大化每一项的便利性。