Узел.js: печать на консоль без конечной новой строки?
есть ли способ печати на консоль без конечной новой строки? Элемент console объект документация ничего не говорит по этому поводу:
console.log()
печать в stdout с новой строкой. Эта функция может принимать несколько аргументов в
printf()-как кстати. Пример:
console.log('count: %d', count);
если формирующие элементы не найдены в первой строке, то
util.inspectиспользуется на каждом аргумент.
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, он будет стрелять adrainсобытие.
в качестве расширения / улучшения к блестящему дополнению, сделанному @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