469 Stimmen

Unterschied zwischen "process.stdout.write" und "console.log" in node.js?

Was ist der Unterschied zwischen "process.stdout.write" und "console.log" in node.js?

EDIT: Die Verwendung von console.log für eine Variable zeigte eine Menge unlesbarer Zeichen, während process.stdout.write ein Objekt anzeigte.

Warum ist das so?

478voto

TK-421 Punkte 10078

console.log() ruft auf. process.stdout.write mit formatierter Ausgabe. Siehe format() in console.js für die Implementierung.

Derzeit (v0.10.ish):

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

181voto

Mauvis Ledford Punkte 37866

Ein Blick in die Node-Dokumente zeigt, dass console.log einfach process.stdout.write mit einem Zeilenumbruch am Ende ist:

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

Quelle: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout

109voto

Gepser Hoil Punkte 3558

Ich weiß, dass diese Frage sehr alt ist, aber ich habe noch niemanden gesehen, der über den Hauptunterschied zwischen process.stdout.write y console.log und ich möchte es nur erwähnen.

Als Mauvis Leford y TK-421 darauf hingewiesen, dass die console.log fügt eine line-break Zeichen am Ende der Zeile ( \n ), aber das ist nicht alles, was es tut.

Der Code hat sich seit mindestens 0.10.X Version und jetzt haben wir eine 5.X Version.

Aquí ist der Code:

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

Wie Sie sehen können, gibt es einen Teil, der besagt .apply(this, arguments) und das macht einen großen Unterschied in der Funktionalität. Es ist einfacher, dies anhand von Beispielen zu erklären:

process.stdout.write hat eine sehr einfache Funktionalität, man kann dort einfach etwas hineinschreiben, etwa so:

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

Wenn Sie den Zeilenumbruch am Ende nicht einfügen, erhalten Sie ein seltsames Zeichen nach der Zeichenkette, etwa so:

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

(Ich glaube, das bedeutet so viel wie "das Ende des Programms", Sie werden es also nur sehen, wenn Sie process.stdout.write am Ende Ihrer Datei verwendet wurde und Sie die Umbruchlinie nicht hinzugefügt haben)

Andererseits, console.log kann mehr tun.

  1. Sie können es auf dieselbe Weise verwenden

    console.log("Hello World"); //You don't need the break line here because it was already formated und auch diese seltsame Figur ist verschwunden

  2. Sie können mehr als eine Zeichenkette schreiben

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

  3. Sie können Assoziationen herstellen

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

Und das war's, diese zusätzliche Funktionalität ist dank der util.format.apply Teil (ich könnte viel darüber erzählen, was das genau macht, aber Sie verstehen, worauf ich hinaus will. aquí ).

Ich hoffe, dass jemand diese Informationen nützlich findet.

43voto

myconode Punkte 2388

Ein großer Unterschied, der noch nicht erwähnt wurde, ist, dass process.stdout nimmt nur Strings als Argumente (können auch Piped Streams sein), während console.log nimmt jeden Javascript-Datentyp an.

z.B.:

// ok
console.log(null)
console.log(undefined)
console.log('hi')
console.log(1)
console.log([1])
console.log({one:1})
console.log(true)
console.log(Symbol('mysymbol'))

// any other data type passed as param will throw a TypeError
process.stdout.write('1')

// can also pipe a readable stream (assuming `file.txt` exists)
const fs = require('fs')
fs.createReadStream('file.txt').pipe(process.stdout)

35voto

saikirann Punkte 391

Ein weiterer wichtiger Unterschied wäre in diesem Zusammenhang mit process.stdout.clearLine() y process.stdout.cursorTo(0) .

Dies wäre nützlich, wenn Sie den Prozentsatz des Herunterladens oder der Verarbeitung in nur einer Zeile anzeigen möchten. Wenn Sie clearLine(), cursorTo() mit console.log() funktioniert nicht, weil es auch an die \n zum Text. Probieren Sie einfach dieses Beispiel aus:

var totalTime = 5000;
var waitInterval = totalTime / 10;
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 + 100)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X