Проверьте, является ли фактический вывод терминалом или нет в node.js

Я пишу интерфейс командной строки для одной из моих программ, и я хотел бы использовать раскрашенный вывод winston если он уместен (вывод является терминалом, и он не перенаправлен в файл).

В bash это можно сделать с помощью теста -t, как правильно сказано в SO answer. Но я ищу альтернативу node.js для тестирования этого.

Ответы

Ответ 1

Аналогично 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');
}

Update

В новых версиях Node (начиная с 0.12.0) API предоставляет флаг stdout, поэтому вы можете просто сделать это:

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