2024 状态调查 中分享您的想法!

欢迎!请参阅 关于 页面获取更多有关本网站如何工作的信息。

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

已选中
 
最佳答案

我们正在此处处理此问题

...