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

gat*_*ado 6 shell subprocess clojure

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

编辑

对不起,我希望子stdout进程输出到父进程相同.

Mar*_*arc 5

另请参阅此第三方库

https://github.com/Raynes/conch

它提供对流的直接访问.


bmi*_*are 3

编辑:澄清之前

您可以使用 sh 包装 shell 命令,然后通过管道传输到 /dev/null,如下所示:

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

这将在进入 Clojure 之前使输出静音。

编辑:澄清后

只要输出足够快,将输出和 stderr 传递给打印就应该可以工作。如果您想要连续输出错误消息和标准输出,查看“sh”函数的源代码应该会有所帮助。

就我个人而言,我会制作自己的 clojure.java.shell/sh 版本,并为每个流创建一个线程,使用来自 org.apache.commons.io.IOUtilsin 的 IOUtils.copy 等将输出直接通过管道传输到out 。