371 votes

Différence entre "process.stdout.write" et "console.log" dans node.js ?

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é un grand nombre de caractères illisibles alors que l'utilisation de process.stdout.write a montré un objet.

Pourquoi ça ?

5 votes

Pouvez-vous fournir un exemple ? console.log() appelle process.stdout.write avec une sortie formatée. Voir format() dans console.js pour l'implémentation.

392voto

TK-421 Points 2848

console.log() llama a 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');
};

49 votes

Il convient également de mentionner que console.log() semble ajouter une nouvelle ligne

2 votes

console.log() également diffusées à débogage des clients . Pour diffuser aux clients de débogage sans imprimer sur stdio, vous pouvez utiliser require('inspector').console.log() .

156voto

Mauvis Ledford Points 12424

En regardant la documentation de Node, il semble que console.log soit juste 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

25 votes

Pour les personnes qui arriveront un peu plus tard, veuillez noter que la v0.3.1 date d'il y a longtemps et que les choses ont changé depuis. :)

7 votes

...non. Je viens de regarder la documentation de la v0.9.9 et console.log est toujours un alias de process.stdout.write avec un saut de ligne. S'il vous plaît, faites vos recherches avant de commenter. nodejs.org/docs/v0.9.9/api/process.html#process.stdout

14 votes

1) la v0.9.9 a deux ans 2) cette documentation est incorrecte, Depuis la version 0.9.9, le format est interpolé par l'utilitaire.

88voto

Gepser Points 1850

Je sais que c'est une très vieille question mais je n'ai vu personne parler de la principale différence entre process.stdout.write y console.log et je veux juste le mentionner.

Comme Mauvis Leford y TK-421 a souligné, le console.log ajoute un line-break à la fin de la ligne ( \n ) mais ce n'est pas tout ce qu'il fait.

Le code n'a pas changé depuis au moins 0.10.X et maintenant nous avons une version 5.X version.

Ici est le code :

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

Comme vous pouvez le voir, il y a une partie qui dit que .apply(this, arguments) et cela fait une grande différence sur la fonctionnalité. Il est plus facile d'expliquer cela avec des exemples :

process.stdout.write a une fonctionnalité très basique, vous pouvez juste écrire quelque chose dedans, comme ceci :

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

Si vous ne mettez pas la ligne de rupture à la fin, vous obtiendrez un caractère bizarre après votre chaîne, quelque chose comme ceci :

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

(Je pense que cela signifie quelque chose comme "la fin du programme", donc vous ne le verrez que si vous process.stdout.write a été utilisé à la fin de votre fichier et vous n'avez pas ajouté la ligne de rupture)

D'un autre côté, console.log peut faire plus.

  1. Vous pouvez l'utiliser de la même manière

    console.log("Hello World"); //You don't need the break line here because it was already formated et aussi ce personnage bizarre a disparu

  2. Vous pouvez écrire plus d'une chaîne de caractères

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

  3. Vous pouvez faire des associations

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

Et c'est tout, cette fonctionnalité supplémentaire est donnée grâce aux util.format.apply (Je pourrais parler longuement de ce que cela fait exactement, mais vous comprenez ce que je veux dire. aquí ).

J'espère que quelqu'un trouvera ces informations utiles.

38voto

mvdanj Points 65

Une grande différence qui n'a pas été mentionnée est que process.stdout ne prend que des chaînes de caractères comme arguments (peuvent aussi être des flux pipés), alors que console.log prend n'importe quel 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)

25voto

saikirann Points 136

Une autre différence importante dans ce contexte serait avec process.stdout.clearLine() y process.stdout.cursorTo(0) .

Cela peut être 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 simplement cet exemple :

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X