2024 Clojure现状调查!中分享你的想法。

欢迎!请参阅关于页面以获取更多关于该功能的信息。

0
Clojure
编辑

clojure.java.shell/launch 不排空输出,导致进程挂起。以下是一个使用curl下载和打印1MB文本的示例

 $ clj
Clojure 1.11.0-alpha4
user=> (require '[clojure.java.shell :refer [launch]])
nil
user=> (launch "curl" "https://gist.githubusercontent.com/khaykov/a6105154becce4c0530da38e723c2330/raw/41ab415ac41c93a198f7da5b47d604956157c5c3/gistfile1.txt")

我认为解决方案是将clojure.java.shell从该特定功能中的(.exit (Runtime/getRuntime))移动到,并使用java.lang.ProcessBuilder代替,它有一个选项可以丢弃输出。

https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/ProcessBuilder.Redirect.html#DISCARD

一个注意事项:DISCARD仅在Java 9及更高版本中可用。我们可以在顶层使用try/catch来解决是否存在DISCARD的问题,如果可用则使用它,如果不可用则回退到.PIPE。其他选择:使用线程在进程运行时消耗输出。或将输出重定向到临时文件。

如果需要,我将提供补丁,并在达成解决方案方向共识后提供。

1 答案

0

被选中
 
最佳答案

我们正在处理这个问题 https://clojure.atlassian.net/browse/CLJ-2688

...