Clojure:如何判断 out 是要控制台还是被管道传输?

chr*_*ood 0 clojure command-line-interface

我正在编写 clojure cli,想知道是否有办法测试输出(即 println)是写入控制台还是通过管道传输到另一个程序?

这与this question类似,但对于clojure。

Jar*_*lax 5

Clojure 是托管语言,因此系统交互相关的东西或多或少等同于 Java。对于 Java,此答案中仅描述了部分解决方案。您当然可以isatty()使用 JNI实现,然后从 Clojure 进行互操作。

但是,从托管在 Node.js 上的process.stdin.isTTYClojureScript使用它很容易实现(在 ClojureScript 中是(-> process .-stdin .-isTTY))。更多细节在这个答案中