【问题标题】:Output "System.out.println" into Emacs Cider's REPL (or other buffer)将“System.out.println”输出到 Emacs Cider 的 REPL(或其他缓冲区)
【发布时间】:2016-05-24 12:49:15
【问题描述】:

我在Clojure 中使用Java 库。它确实使用System.out.println 将许多内容直接输出到控制台。

我在 Emacs 中使用最新的 Cider。我从cider-jack-in 开始苹果酒。但是,我可以看到这些输出。我以为它们会被复制到 nrepl-server 缓冲区,但事实并非如此。

我也尝试在 REPL 中运行 (alter-var-root #'*out* (constantly *out*)),但没有成功。

如果可以做到的话,我应该如何做到这一点我缺少什么。

【问题讨论】:

  • 看看 messages 缓冲区,我想他们去那里
  • 消息缓冲区只记录 CIDER 和 nREPL 服务器之间的通信。
  • 输出应该正常出现在 REPL 缓冲区中。如果没有,请在 github 上提交工单,我们会调查问题。
  • @BozhidarBatsov 好的,如果有问题会重试测试并报告,谢谢!

标签: emacs clojure cider


【解决方案1】:

您需要将分配给System.outjava.io.PrintStream 替换为将所有内容转发给clojure.core/*out*(这是java.io.PrintWriter 的一个实例)的一个。为此,您必须创建一个从PrintStreamPrintWriter 的适配器。我在Java SDK API中没有找到现有的,但Apache Commons IO中有一个(或者您可以自己实现):

(import (java.io PrintStream)
        (org.apache.commons.io.output WriterOutputStream))

(-> *out*
    (WriterOutputStream.)
    (PrintStream.)
    (System/setOut))

从现在开始,当您在 JVM 中的任何位置调用 System.out.println 时,输出将被传递到 clojure.core/*out*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多