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

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

В bash это можно сделать с помощью теста -t в виде ТАК ответ правильно говорит. Но я ищу альтернативу node.js для тестирования этого.


person KARASZI István    schedule 16.08.2011    source источник


Ответы (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');
}

Обновлять

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

if (process.stdout.isTTY) {
  console.log('not redirected');
}
else {
  console.log('redirected');
}
person loganfsmyth    schedule 17.08.2011
comment
Возможно, API эволюционировал, но обратите внимание, что, согласно this, предпочтительный способ проверки если узел работает в TTY, должен запросить process.stdout.isTTY - person epidemian; 02.03.2013
comment
@epidemian Хороший звонок, я обновил ответ. API определенно эволюционировал, поскольку это довольно старый ответ. - person loganfsmyth; 02.03.2013