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

26
我正在为我的一个程序编写命令行界面,如果它合适的话(输出是终端并且没有重定向到文件),我想使用winston 的着色输出。在bash中,可以使用-t测试来实现,如此SO答案所述。但是,我正在寻找用于测试这一点的node.js替代方案。
1个回答

39
与您提供的 bash 示例类似,Node.js 也有“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');
}

更新

在新版本的Node(从0.12.0开始),API在stdout上提供了一个标志,因此您只需执行以下操作:

if (process.stdout.isTTY) {
  console.log('not redirected');
}
else {
  console.log('redirected');
}

9
也许 API 已经更新,但是请注意,根据 此处,检查节点是否在 TTY 上运行的首选方法是询问 process.stdout.isTTY - epidemian
2
@epidemian 不错的建议,我更新了答案。API肯定已经发展了很多,因为这是一个相当旧的答案。 - loganfsmyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接