gat*_*ado 6 shell subprocess clojure
我想使用类似shell-out的东西[ http://richhickey.github.com/clojure-contrib/shell-out-api.html ],但不捕获任何输出.当然,输出可以传递给打印,但这略微不理想(例如,在子过程可能失败的情况下).
对不起,我希望子stdout
进程输出到父进程相同.
编辑:澄清之前
您可以使用 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 。