如何在Clojure中打印到STDERR?

Dre*_*kes 25 clojure

println函数写入STDOUT.我们怎样才能写信息STDERR呢?

(println "Hello, STDOUT!")
Run Code Online (Sandbox Code Playgroud)

Dre*_*kes 26

没有特定的功能,但是您可以动态重新绑定保存println写入的流的var ,如下所示:

(println "Hello, STDOUT!")

(binding [*out* *err*]
  (println "Hello, STDERR!"))
Run Code Online (Sandbox Code Playgroud)

在我的REPL中,颜色表示流(红色是STDERR):

在此输入图像描述


mat*_*ore 14

简单的Java方法工作正常,Clojure新手很容易理解:

(.println *err* "Hello, STDERR!")
Run Code Online (Sandbox Code Playgroud)

另一种选择,只是为了好玩,是clojure.java.io/copy:

(require '[clojure.java.io :as cjio])

(cjio/copy "Hello, STDERR!\n" *err*)
(.flush *err*)
Run Code Online (Sandbox Code Playgroud)