clojure - 如何在没有管道输出的情况下运行程序?

时间:2011-08-11 07:17:49

标签: shell clojure subprocess

我想使用类似 shell-out [http://richhickey.github.com/clojure-contrib/shell-out-api.html]的内容,但不捕获任何输出。当然输出可以传递给print,但是这略微不理想(例如,在子进程可能失败的情况下)。

修改

抱歉,我希望子流程输出到与父流程相同的stdout

2 个答案:

答案 0 :(得分:5)

另见第三方图书馆

https://github.com/Raynes/conch

它提供对流的直接访问。

答案 1 :(得分:3)

编辑:澄清之前

你可以用sh包装shell命令然后管道到/ dev / null,如下所示:

 (clojure.java.shell/sh "sh" "-c" "echo hello > /dev/null")
 ;; {:exit 0, :out "", :err ""}

这将使得在出现clojure之前使输出静音。

编辑:澄清后

只要输出足够快,传递输出和stderr就可以正常工作。如果你想要连续输出错误信息和标准输出,那么查看“sh”函数的来源应该会有所帮助。

就个人而言,我会创建自己的clojure.java.shell/sh版本,并为每个流创建一个线程,使用来自org的IOUtils.copy之类的东西直接将输出传递给 out 。 apache.commons.io.IOUtilsin