Node.js: печать на консоль без завершающей новой строки?

Есть ли способ печати на консоль без завершающей новой строки? console объект документация ничего не говорит об этом:

console.log()

Печать в stdout с помощью новой строки. Эта функция может принимать несколько аргументов способом printf(). Пример:

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

Если элементы форматирования не найдены в первой строке, то для каждого аргумента используется util.inspect.

Ответ 1

Вы можете использовать process.stdout.write():

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

Подробнее см. в документах.

Ответ 2

Кроме того, если вы хотите перезаписать сообщения в одной строке, например, в обратном отсчете, вы можете добавить '\ r' в конец строки.

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

Ответ 3

util.print. Читайте: http://nodejs.org/api/util.html#util_util_print

util.print([...]) # Синхронная функция вывода. Блокирует процесс, передает каждый аргумент в строку, а затем выводит на stdout. Не помещает символы новой строки после каждого аргумента.

Пример:

// 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");
});

Ответ 4

В консоли Windows (Linux тоже) вы должны заменить '\ r' эквивалентным кодом \033 [0G:

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

Это использует escape-последовательность терминала VT220 для отправки курсора в первый столбец.

Ответ 5

Кажется, есть много ответов, предлагающих process.stdout.write. Журналы ошибок должны испускаться вместо process.stderr (используйте console.error). Для тех, кто задается вопросом, почему process.stdout.write('\ 033 [0G'); ничего не делал, потому что stdout буферизирован, и вам нужно ждать события drain (см. Stdout flush для NodeJS?). Если write возвращает false, он запустит событие drain.

Ответ 6

Ни одно из этих решений не работает для меня. process.stdout.write('ok\033 [0G') и просто используя '\ r' просто создайте новую строку, не перезаписывайте, Mac OSX 10.9.2

EDIT: мне пришлось использовать это, чтобы заменить текущую строку

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

Ответ 7

У меня возникла ошибка при использовании строгого режима.

Node error: "Октальные литералы запрещены в строгом режиме".

Я нашел ответ здесь: https://github.com/SBoudrias/Inquirer.js/issues/111

process.stdout.write( "получено:" + bytesReceived + "\ x1B [0G" );