我一直在使用 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 不应该试图为它们中的每一个最大程度提高便利性。