clojure - как запустить программу, не передавая ее вывод? - PullRequest
6 голосов
/ 11 августа 2011

Я хочу использовать что-то вроде shell-out [http://richhickey.github.com/clojure-contrib/shell-out-api.html], но без захвата какого-либо вывода.Конечно, выходные данные можно передать на печать, но это немного меньше, чем желательно (например, в случае сбоя подпроцесса).

edit

Извините, я хочу вывести подпроцесск тому же stdout, что и родительский процесс.

Ответы [ 2 ]

5 голосов
/ 04 марта 2012

Также см. Эту стороннюю библиотеку

https://github.com/Raynes/conch

Обеспечивает прямой доступ к потокам.

3 голосов
/ 11 августа 2011

РЕДАКТИРОВАТЬ: до уточнения

Вы можете заключить команду оболочки в sh, а затем передать / dev / null следующим образом:

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

Это будетВыключите вывод перед тем, как закрыть.

РЕДАКТИРОВАТЬ: После уточнения

Передача вывода и stderr на печать должна работать, пока вывод выходит достаточно быстро.Если вы хотите что-то с непрерывным выводом сообщений об ошибках и стандартным выводом, поиск источника функции sh может помочь.

Лично я бы сделал свою собственную версию clojure.java.shell/sh идля каждого потока создайте поток, который направляет вывод непосредственно в out , используя что-то вроде IOUtils.copy из org.apache.commons.io.IOUtilsin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...