Разница между "процессом.стандартный вывод.напишите " и " консоль.войти " в узел.Джей?



в чем разница между "процессом.стандартный вывод.напишите " и " консоль.войти " в узел.Джей?



изменить: с помощью консоли.журнал для переменной показал много нечитаемых символов при использовании процесса.стандартный вывод.запись показала объект.



Почему это?

554   6  

6 ответов:

console.log() звонки process.stdout.write С форматированным выводом. Смотрите format() в консоли.js для реализации.

В настоящее время (v0.10.иш):

Console.prototype.log = function() {
  this._stdout.write(util.format.apply(this, arguments) + '\n');
};

глядя на узел docs, по-видимому, консоль.журнал-это просто процесс.стандартный вывод.напишите с разрывом строки в конце:

console.log = function (d) {
  process.stdout.write(d + '\n');
};

Источник:http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout

я знаю, что это очень старый вопрос, но я не видел, чтобы кто-то говорил о главном различии между process.stdout.write и console.log и я просто хочу, чтобы об этом говорить.

как Лефорд Mauvis и TK-421 указал, что console.log добавляет a line-break символ в конце строки (\n) но это не все, что он делает.

код не изменился с тех пор, по крайней мере 0.10.X версия и теперь у нас есть 5.X версия.

здесь код:

Console.prototype.log = function() {
  this._stdout.write(util.format.apply(this, arguments) + '\n');
};

как вы можете видеть, есть часть, которая говорит .apply(this, arguments) и это имеет большое значение для функциональности. Это легче объяснить на примерах:

process.stdout.write имеет базовую функциональность, вы можете просто написать что-нибудь вроде этого:

process.stdout.write("Hello World\n"); 

если вы не поставите линию разрыва в конце, вы получите странный символ после вашей строки, что-то вроде это:

process.stdout.write("Hello World"); //Hello World% 

(я думаю, что означает что-то вроде "конец программы", так что вы увидите его, только если вы process.stdout.write был использован в конце вашего файла, и вы не добавили линию разрыва)

С другой стороны, console.log могу сделать больше.

  1. вы можете использовать его таким же образом

    console.log("Hello World"); //You don't need the break line here because it was already formated а еще этот странный персонаж исчез

  2. вы можете написать более одного строка

    console.log("Hello", "World");

  3. вы можете сделать ассоциации

    console.log("Hello %s", "World") //Useful when "World" is inside a variable

и это все, что добавленная функциональность предоставляется благодаря util.format.apply часть (я мог бы много говорить о том, что именно это делает, но вы понимаете мою точку зрения, вы можете прочитать больше здесь).

я надеюсь, что кто-то найдет эту информацию полезной.

одна большая разница, которая не была упомянута в том, что

еще одно важное отличие в этом контексте с process.stdout.clearLine() и process.stdout.cursorTo(0).

Это было бы полезно, если вы хотите показать процент загрузки или обработки только в одной строке. Если вы используете clearLine (), cursorTo () с console.log() он не работает, потому что он также добавляет \n к тексту. Просто попробуйте этот пример:

var waitInterval = 500;
var totalTime = 5000;
var currentInterval = 0;

function showPercentage(percentage){
    process.stdout.clearLine();
    process.stdout.cursorTo(0);
    console.log(`Processing ${percentage}%...` ); //replace this line with process.stdout.write(`Processing ${percentage}%...`);
}

var interval = setInterval(function(){
 currentInterval += waitInterval;
 showPercentage((currentInterval/totalTime) * 100);
}, waitInterval);

setTimeout(function(){
 clearInterval(interval); 
}, totalTime);

Я только что заметил что-то во время исследования этого после получения помощи с https.запрос метода post. Думал, что я разделяю некоторый вклад, чтобы помочь понять.

process.stdout.write не добавляет новую строку в то время как console.log делает, как другие упомянули. Но есть и то, что легче объяснить на примерах.

var req = https.request(options, (res) => {
    res.on('data', (d) => {
        process.stdout.write(d);
        console.log(d)
    });
});

process.stdout.write(d); будет печатать данные правильно без новой строки. Однако console.log(d) напечатает новую строку, но данные не будут отображаться правильно, давая это <Buffer 12 34 56... например.

сделать console.log(d) показать информацию правильно, я должен был бы сделать это.

var req = https.request(options, (res) => {
    var dataQueue = "";    
    res.on("data", function (d) {
        dataQueue += d;
    });
    res.on("end", function () {
        console.log(dataQueue);
    });
});

так что в основном:

  • process.stdout.write непрерывно печатает информацию в виде извлекаемых данных и не добавляет новую строку.

  • console.log выводит информацию, которая была получена в точке поиска и добавляет новую строку.

это лучший способ, которым я могу объяснить это.

Comments

    Ничего не найдено.