用clojure读取大命令输出

时间:2010-11-01 17:22:52

标签: clojure clojure-contrib

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

我一直在收到java.lang.OutOfMemoryError。有没有办法打开一种管道,让我读取输出并将其解析为矢量。就像命令输出的延迟序列一样?

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

1 个答案:

答案 0 :(得分:3)

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

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

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