В программе Clojure, как вы читать от стандартного выхода? Я хочу сделать это или передать стандартный вывод во входной поток, который я создаю. Стандартный выход в Clojure - java.io.PrintWriter.Может ли Clojure Capture Standard выйти из существующего процесса?
У меня работа Samza, начатая программой Clojure. Там также есть сервер nrepl, к которому я могу подключиться удаленно. После подключения мне нужно иметь возможность использовать стандартную информацию (на какие задания записывать выходные данные).
1) В соответствии с этим SO question, with-out-str
(см here) позволяет нам временно привязать *out*
(к java.io.StringWriter), так что ваш исполняемый код записывает в строку. Но это не позволяет мне подключиться к существующим *out*
.
2) Если вы посмотрите на clojure.java.shell (см here), он получает время исполнения JVM и Exec это процесс на нем. Из этого процесса вы можете получить стандартный поток вывода. Но опять же, это не стандарт по умолчанию (*out*
), который я ищу.
3) Это SO question подходит к тому, что я пытаюсь сделать. Но опять же, я подключаюсь к существующему процессу и хочу отбросить его стандартный вывод.
Возможно ли это в Clojure (см. here)? Кто-нибудь решил это?
В Linux вы можете читать из '/ proc/{pid}/fd/1', который является этапом этого процесса. Аналогично '/ proc/{pid}/fd/2' является stderr. –
Вы имеете в виду, что хотите вывести выход из процесса в процесс clojure, например 'ls | my-clj' и my-clj читал вывод ls? Если это так, просто используйте http://stackoverflow.com/questions/18688755/reading-characters-from-stdin –
@AlanThompson Нет, я дистанционно подключаюсь к реплике в уже запущенном процессе. После подключения, я хочу * «хвост» * стандартный вывод. – Nutritioustim