在node.js中测试实际输出是否为终端

KAR*_*ván 20 command-line command-line-interface node.js

我正在为我的一个程序编写一个命令行界面,如果合适的话,我想使用winston的彩色输出(输出是终端而不是重定向到文件).

在bash中,可以通过-t测试完成,因为这个SO答案正确地说.但我正在寻找node.js替代方案来测试它.

log*_*yth 26

与链接到的bash示例类似,Node有'tty'模块来处理这个问题.

要检查输出是否重定向,可以使用'isatty'方法.文档:http://nodejs.org/docs/v0.5.0/api/tty.html#tty.isatty

例如,检查stdout是否被重定向:

var tty = require('tty');
if (tty.isatty(process.stdout.fd)) {
  console.log('not redirected');
}
else {
  console.log('redirected');
}
Run Code Online (Sandbox Code Playgroud)

更新

在新版本的Node(从0.12.0开始)中,API提供了一个标志,stdout因此您可以这样做:

if (process.stdout.isTTY) {
  console.log('not redirected');
}
else {
  console.log('redirected');
}
Run Code Online (Sandbox Code Playgroud)

  • 也许API已经发展,但请注意,根据[this](http://nodejs.org/api/tty.html#tty_tty),检查节点是否在TTY上运行的首选方法是要求` process.stdout.isTTY` (5认同)
  • @epidemian 打得好,我更新了答案。API 肯定已经发展了,因为这是一个相当古老的答案。 (2认同)