801 votes

Node.js : impression sur la console sans nouvelle ligne de fin ?

Existe-t-il une méthode permettant d'imprimer sur la console sans nouvelle ligne de fin ? Le site documentation sur la console semble exclure si c'était possible, disant simplement que console.log ajoute une nouvelle ligne.

0 votes

Question connexe : Et si le texte est long ?

1234voto

onteria_ Points 18947

Vous pouvez utiliser process.stdout.write() :

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

Voir le documents pour les détails .

10 votes

Cela a résolu le problème inverse pour moi. console.log était en train d'imprimer \n littéralement alors que je voulais qu'il imprime un caractère de nouvelle ligne.

0 votes

@Paulpro n'est pas ' \n ' le caractère de nouvelle ligne ?

3 votes

@AlexMills C'est la séquence d'échappement pour un caractère de nouvelle ligne, mais ce n'est pas un caractère de nouvelle ligne lui-même. J'obtenais un caractère littéral ` followed by an n`, lorsque je voulais sortir un vrai caractère de nouvelle ligne.

440voto

rodowi Points 2242

De même, si vous souhaitez écraser des messages sur la même ligne, par exemple dans un compte à rebours, vous pouvez ajouter ' \r à la fin de la chaîne.

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

30 votes

Bien que ce ne soit pas la réponse à la question, c'est une réponse étonnante. J'ai hâte d'essayer.

8 votes

Cela ne pas fonctionne sur Windows pour moi. Mais ça marche très bien sur les systèmes non-dow.

49 votes

Pour Windows, vous pouvez utiliser le code équivalent ' \033 [0G', comme dans : process.stdout.write("Downloading " + data.length + " bytes\033[0G");

24voto

yan_te Points 41

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

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

Elle utilise une séquence d'échappement de terminal VT220 pour envoyer le curseur à la première colonne.

2 votes

Comment remonter plusieurs lignes au lieu de la seule ligne actuelle ? Le site top semble être capable d'écraser tout mon tampon pendant qu'il est en cours d'exécution et de restaurer ce qui était là quand il a terminé. Quelqu'un sait-il comment il fait cela ? i.imgur.com/AtCmEjn.gif

0 votes

Je pense qu'il utilise probablement quelque chose comme ça : github.com/mscdex/node-ncurses github.com/chjj/blessed

1 votes

Cela fonctionne mais j'ai aussi le curseur comme suit [\] 39 et le curseur est mis en évidence sur le premier caractère : var spinner = '|/-\\'.split('');process.stdout.write("["+this.randomElemen‌​t(spinner)+"] "+message+"\033[0G");

12voto

douyw Points 971

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

util.print([...]) Une fonction de sortie synchrone. Elle bloque le processus, transforme chaque argument en une chaîne de caractères, puis émet une sortie vers 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");
});

45 votes

util.print est désormais obsolète

0 votes

(node:7616) DeprecationWarning: util.print is deprecated. Use console.log instead.

5voto

Tyguy7 Points 79

Aucune de ces solutions ne fonctionne pour moi. process.stdout.write('ok \033 [0G') et en utilisant simplement ' \r ' crée juste une nouvelle ligne, n'écrase pas, Mac OSX 10.9.2

EDIT : J'ai dû utiliser ceci pour remplacer la ligne actuelle

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

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