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

欢迎!请查看 关于 页面以了解有关此网站的更多信息。

0
tools.build
重新标签

类似于 https://ask.clojure.org/index.php/11509/clojure-launch-doesnt-consume-inputstream-process-terminating

在忽略输出时,tools.build.api/process 挂起,并且进程有大量输出。以下是用 curl 下载和打印 1MB 文本的情况

$ clj -Sdeps '{:deps {io.github.clojure/tools.build {:git/tag "v0.7.5" :git/sha "34727f7"}}}'
Clojure 1.11.0-alpha3
user=> (require '[clojure.tools.build.api :as tb])

user=> (tb/process {:command-args ["curl" "https://gist.githubusercontent.com/khaykov/a6105154becce4c0530da38e723c2330/raw/41ab415ac41c93a198f7da5b47d604956157c5c3/gistfile1.txt"] :out :ignore})
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

我认为,而不是使用 PIPE,ignore 选项应使用 DISCARD

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/TBUILD-1,我还没有时间去考虑它。

...