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



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




console.log()



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



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


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


697   8  

8 ответов:

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

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

посмотреть docs for details.

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

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

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

process.stdout.write('ok3[0G');

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

util.печати можно использовать также. Читайте:http://nodejs.org/api/util.html#util_util_print

util.печать.[(..])# Функция синхронного выхода. Заблокирует процесс, приведет каждый аргумент к строке, а затем выведет в 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");
});

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

в качестве расширения / улучшения к блестящему дополнению, сделанному @rodowi выше относительно возможности перезаписать строку:

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

Если вы не хотите, чтобы курсор терминала был расположен на первом символе, как я видел в своем коде, подумайте о следующем:

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)

поместив \r перед следующей операцией печати курсор сбрасывается непосредственно перед заменой строки перезаписывает предыдущую.

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

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

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

ошибка узла: "Восьмеричные литералы не допускается в строгом режиме."

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

Comments

    Ничего не найдено.