Was ist der Unterschied zwischen "process.stdout.write" und "console.log" in node.js?
BEARBEITEN: Die Verwendung von console.log für eine Variable zeigte viele unlesbare Zeichen, während die Verwendung von process.stdout.write ein Objekt zeigte.
Warum ist das so?
javascript
node.js
Ajsie
quelle
quelle
Antworten:
console.log()
Aufrufeprocess.stdout.write
mit formatierter Ausgabe.format()
Informationen zur Implementierung finden Sie in console.js.Derzeit (v0.10.ish):
quelle
console.log()
eine neueWenn Sie sich die Node-Dokumente ansehen, ist console.log anscheinend nur process.stdout.write mit einem Zeilenumbruch am Ende:
Quelle: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber ich habe niemanden gesehen, der über den Hauptunterschied zwischen
process.stdout.write
und gesprochen hat,console.log
und ich möchte es nur erwähnen.Wie Mauvis Leford und TK-421 betonten ,
console.log
fügtline-break
das am Ende der Zeile ein Zeichen hinzu (\n
), aber das ist noch nicht alles.Der Code hat sich seit mindestens der
0.10.X
Version nicht geändert und jetzt haben wir eine5.X
Version.Hier ist der Code:
Wie Sie sehen können, gibt es einen Teil, der besagt,
.apply(this, arguments)
dass die Funktionalität einen großen Unterschied macht. Es ist einfacher, dies anhand von Beispielen zu erklären:process.stdout.write
hat eine sehr grundlegende Funktionalität, Sie können einfach etwas darin schreiben, wie folgt:Wenn Sie die Bruchlinie nicht am Ende setzen, erhalten Sie nach Ihrer Zeichenfolge ein seltsames Zeichen, etwa so:
(Ich denke, das bedeutet so etwas wie "das Ende des Programms", sodass Sie es nur sehen, wenn Sie
process.stdout.write
am Ende Ihrer Datei verwendet wurden und die Unterbrechungslinie nicht hinzugefügt haben.)Auf der anderen Seite
console.log
kann mehr tun.Sie können es auf die gleiche Weise verwenden
console.log("Hello World"); //You don't need the break line here because it was already formated
und auch dieser seltsame Charakter verschwandSie können mehr als eine Zeichenfolge schreiben
console.log("Hello", "World");
Sie können Assoziationen herstellen
console.log("Hello %s", "World") //Useful when "World" is inside a variable
Und das war's, dass dank des
util.format.apply
Teils zusätzliche Funktionalität gegeben ist (ich könnte viel darüber sprechen, was genau dies bewirkt, aber Sie verstehen, dass Sie hier mehr lesen können ).Ich hoffe, jemand findet diese Informationen nützlich.
quelle
stdout.write
und vermeidet%
%
am Ende zu sein, indem ich einfachprocess.stdout.write('\n');
am Ende meiner Schleife anrief (wenn Sie zum Beispiel haben)%
ist nur die Art und Weise der Shell sagt es am Ende der Datei kein Newline ist.%
in der DateiEin großer Unterschied, der nicht erwähnt wurde, ist, dass process.stdout nur Zeichenfolgen als Argumente verwendet (kann auch als Piping- Streams verwendet werden), während console.log einen beliebigen Javascript-Datentyp verwendet.
z.B:
quelle
Ein weiterer wichtiger Unterschied in diesem Zusammenhang wäre mit
process.stdout.clearLine()
undprocess.stdout.cursorTo(0)
.Dies ist nützlich, wenn Sie den Prozentsatz des Downloads oder der Verarbeitung in nur einer Zeile anzeigen möchten. Wenn Sie clearLine () verwenden, funktioniert cursorTo ()
console.log()
damit nicht, da es auch \ n an den Text anfügt . Probieren Sie einfach dieses Beispiel aus:quelle
Ich habe gerade etwas bemerkt, als ich dies recherchiert habe, nachdem ich Hilfe bei https.request für die Post-Methode erhalten hatte. Ich dachte, ich teile einige Beiträge, um das Verständnis zu verbessern.
process.stdout.write
fügt währenddessenconsole.log
keine neue Zeile hinzu , wie andere erwähnt hatten. Aber es gibt auch das, was mit Beispielen leichter zu erklären ist.process.stdout.write(d);
druckt die Daten ordnungsgemäß ohne neue Zeile. Esconsole.log(d)
wird jedoch eine neue Zeile gedruckt, aber die Daten werden nicht korrekt angezeigt,<Buffer 12 34 56...
z. B. dies.Um
console.log(d)
die Informationen korrekt anzuzeigen, müsste ich dies tun.Also im Grunde genommen:
process.stdout.write
Gibt die Informationen kontinuierlich aus, während die Daten abgerufen werden, und fügt keine neue Zeile hinzu.console.log
druckt die Informationen aus, die zum Zeitpunkt des Abrufs erhalten wurden, und fügt eine neue Zeile hinzu.So kann ich es am besten erklären.
quelle
Der einfache Unterschied besteht darin, dass die Methoden console.log () automatisch neue Zeilenzeichen anhängen. Dies bedeutet, dass jedes Ergebnis in einer neuen Zeile gedruckt wird, wenn wir das Ergebnis durchlaufen und drucken.
Die Methoden process.stdout.write () hängen kein neues Zeilenzeichen an. nützlich zum Drucken von Mustern.
quelle
Console.log implementiert process.sdout.write, process.sdout.write ist ein Puffer / Stream, der direkt in Ihrer Konsole ausgegeben wird.
Laut meiner Puglin- Serverlinie :
console = new Console(consoleOptions)
Sie können die Konsolenklasse mit Ihrem eigenen Readline- System neu schreiben .Sie können die Codequelle von console.log sehen:
Mehr sehen :
quelle