Quelle est la différence entre "process.stdout.write" et "console.log" dans node.js?
EDIT: L'utilisation de console.log pour une variable a montré beaucoup de caractères illisibles, alors que process.stdout.write a montré un objet.
Pourquoi donc?
console.log()
appelle process.stdout.write
avec une sortie formatée. Voir format()
dans console.js pour l'implémentation.
Actuellement (v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
En regardant les documents sur les nœuds, apparemment, console.log n'est que process.stdout.write avec un saut de ligne à la fin:
console.log = function (d) {
process.stdout.write(d + '\n');
};
Source: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
Une grande différence qui n’a pas été mentionnée est que process.stdout prend uniquement des chaînes en tant qu’arguments (peuvent également être des flux acheminés), tandis que console.log accepte tout type de données Javascript.
par exemple:
// 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)
Une autre différence importante dans ce contexte serait avec process.stdout.clearLine()
et process.stdout.cursorTo(0)
.
Cela serait utile si vous souhaitez afficher le pourcentage de téléchargement ou de traitement sur une seule ligne. Si vous utilisez clearLine (), cursorTo () avec console.log()
, cela ne fonctionne pas car il ajoute également\n au texte. Essayez juste cet exemple:
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);
Je viens de remarquer quelque chose lors de mes recherches après avoir obtenu de l'aide sur https.request for post method. Je pensais partager quelques idées pour aider à comprendre.
process.stdout.write
n'ajoute pas de nouvelle ligne, contrairement à console.log
, comme d'autres l'avaient mentionné. Mais il y a aussi ce qui est plus facile à expliquer avec des exemples.
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);
imprimera les données correctement sans nouvelle ligne. Cependant, console.log(d)
imprimera une nouvelle ligne mais les données ne s'afficheront pas correctement, en indiquant par exemple <Buffer 12 34 56...
.
Pour que console.log(d)
affiche correctement les informations, je devrais le faire.
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
Donc en gros:
process.stdout.write
imprime continuellement les informations au fur et à mesure que les données sont récupérées et n'ajoute pas de nouvelle ligne.
console.log
imprime les informations obtenues au moment de l'extraction et ajoute une nouvelle ligne.
C'est la meilleure façon de l'expliquer.
La différence simple est la suivante: console.log () methods ajoute automatiquement un nouveau caractère de ligne. Cela signifie que si nous parcourons et imprimons le résultat, chaque résultat est imprimé dans une nouvelle ligne.
process.stdout.write () Les méthodes n’ajoutent pas le caractère de nouvelle ligne. utile pour imprimer des motifs.