使用 clojure 读取大型命令输出

发布于 2024-09-30 14:46:44 字数 194 浏览 2 评论 0原文

我使用 clojure.java.shell 命令中的 sh 函数来读取命令的非常大的输出。输出约为 60meg 数据。

我不断收到 java.lang.OutOfMemoryError 错误。有没有办法打开一种管道,让我读取输出并将其解析为向量。就像命令输出的惰性序列一样?

基本上,数据是一个大的字节数组,我想将其转换为数字并放入向量中。

I'm using the sh function from the clojure.java.shell command to read the very large output of a command. The output is around 60meg of data.

I keep getting java.lang.OutOfMemoryError. Is there a way to open a sort of pipe that would let me read the output and parse it into a vector . Like a lazy sequence for the output of the command?

Basically the data is a large array of byte that I want to convert to just numbers and put into a vector.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅气称霸 2024-10-07 14:46:44

clojure.java.shell/sh 将始终返回非惰性字符串

在 BufferedReader 上使用惰性 line-seq 的解决方案(不处理关闭、环境传递和编码):

(->> (.exec (Runtime/getRuntime) "YOUR_LONG_RUNNING_COMMAND ARG ...")
    .getInputStream
    clojure.java.io/reader
    line-seq
    (map YOUR-FUNCTION))

clojure.java.shell/sh will always return a non-lazy string

A solution (doesn't handle closing, environment passing and encoding) using lazy line-seq on an BufferedReader:

(->> (.exec (Runtime/getRuntime) "YOUR_LONG_RUNNING_COMMAND ARG ...")
    .getInputStream
    clojure.java.io/reader
    line-seq
    (map YOUR-FUNCTION))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文