Разница между "процессом.стандартный вывод.напишите " и " консоль.войти " в узел.Джей?
в чем разница между "процессом.стандартный вывод.напишите " и " консоль.войти " в узел.Джей?
изменить: с помощью консоли.журнал для переменной показал много нечитаемых символов при использовании процесса.стандартный вывод.запись показала объект.
Почему это?
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добавляет aline-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могу сделать больше.
вы можете использовать его таким же образом
console.log("Hello World"); //You don't need the break line here because it was already formatedа еще этот странный персонаж исчезвы можете написать более одного строка
console.log("Hello", "World");вы можете сделать ассоциации
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