Node.js: impression sur console sans ligne de retour?

Existe-t-il une méthode pour imprimer sur la console sans nouvelle ligne de fin? La documentation de l’ object console ne dit rien à ce sujet:

console.log()

Imprime sur stdout avec newline. Cette fonction peut prendre plusieurs arguments à la manière de printf() . Exemple:

 console.log('count: %d', count); 

Si des éléments formateurs ne sont pas trouvés dans la première chaîne, util.inspect est utilisé pour chaque argument.

    Vous pouvez utiliser process.stdout.write() :

     process.stdout.write("hello: "); 

    Voir les documents pour plus de détails .

    De plus, si vous souhaitez écraser les messages dans la même ligne, par exemple dans un compte à rebours, vous pouvez append ‘\ r’ à la fin de la chaîne.

     process.stdout.write("Downloading " + data.length + " bytes\r"); 

    Dans la console Windows (Linux aussi), vous devez remplacer “\ r” par son code équivalent \ 033 [0G :

     process.stdout.write('ok\033[0G'); 

    Cela utilise une séquence d’échappement du terminal VT220 pour envoyer le curseur à la première colonne.

    util.print peut également être utilisé. Lire: http://nodejs.org/api/util.html#util_util_print

    util.print ([…]) # Une fonction de sortie synchrone. Bloque le processus, convertit chaque argument en chaîne, puis affiche la sortie stdout. Ne place pas de nouvelles lignes après chaque argument.

    Un exemple:

     // get total length var len = parseInt(response.headers['content-length'], 10); var cur = 0; // handle the response response.on('data', function(chunk) { cur += chunk.length; util.print("Downloading " + (100.0 * cur / len).toFixed(2) + "% " + cur + " bytes\r"); }); 

    Il semble y avoir beaucoup de réponses suggérant process.stdout.write . Les journaux d’erreur doivent plutôt être émis sur process.stderr (Utilisez console.error ). Pour ceux qui se demandent pourquoi process.stdout.write (‘\ 033 [0G’]; ne faisait rien parce que stdout est mis en mémoire tampon et que vous devez attendre l’événement de drain (Voir Stdout flush pour NodeJS? ). Si write renvoie false, cela déclenchera un événement de drain .

    Aucune de ces solutions ne fonctionne pour moi. process.stdout.write (‘ok \ 033 [0G’) et en utilisant simplement ‘\ r’ créez simplement une nouvelle ligne, ne remplacez pas Mac OSX 10.9.2

    EDIT: je devais utiliser cela pour remplacer la ligne actuelle

    process.stdout.write (‘\ 033 [0G’); process.stdout.write (‘newstuff’);

    J’ai eu une erreur en utilisant le mode ssortingct.

    Erreur de noeud: “Les littéraux octaux ne sont pas autorisés en mode ssortingct.”

    J’ai trouvé la réponse ici: https://github.com/SBoudrias/Inquirer.js/issues/111

    process.stdout.write (“reçu:” + bytesReceived + “\ x1B [0G”);

    Comme une extension / amélioration de la shinye addition faite par @rodowi ci-dessus concernant la possibilité d’écraser une ligne:

     process.stdout.write("Downloading " + data.length + " bytes\r"); 

    Si vous ne souhaitez pas que le curseur du terminal se trouve au premier caractère, comme je l’ai vu dans mon code, envisagez de procéder comme suit:

     let dots = '' process.stdout.write(`Loading `) let tmrID = setInterval(() => { dots += '.' process.stdout.write(`\rLoading ${dots}`) }, 1000) setTimeout(() => { clearInterval(tmrID) console.log(`\rLoaded in [3500 ms]`) }, 3500) 

    En plaçant le \r devant l’instruction d’impression suivante, le curseur est réinitialisé juste avant que la chaîne de remplacement ne remplace la précédente.