Ответ 1
Вы можете использовать process.stdout.write()
:
process.stdout.write("hello: ");
Подробнее см. в документах.
Есть ли способ печати на консоль без завершающей новой строки? console
объект документация ничего не говорит об этом:
console.log()
Печать в stdout с помощью новой строки. Эта функция может принимать несколько аргументов способом
printf()
. Пример:console.log('count: %d', count);
Если элементы форматирования не найдены в первой строке, то для каждого аргумента используется
util.inspect
.
Вы можете использовать process.stdout.write()
:
process.stdout.write("hello: ");
Подробнее см. в документах.
Кроме того, если вы хотите перезаписать сообщения в одной строке, например, в обратном отсчете, вы можете добавить '\ r' в конец строки.
process.stdout.write("Downloading " + data.length + " bytes\r");
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");
});
В консоли Windows (Linux тоже) вы должны заменить '\ r' эквивалентным кодом \033 [0G:
process.stdout.write('ok\033[0G');
Это использует escape-последовательность терминала VT220 для отправки курсора в первый столбец.
Кажется, есть много ответов, предлагающих process.stdout.write
. Журналы ошибок должны испускаться вместо process.stderr
(используйте console.error
). Для тех, кто задается вопросом, почему process.stdout.write('\ 033 [0G'); ничего не делал, потому что stdout буферизирован, и вам нужно ждать события drain
(см. Stdout flush для NodeJS?). Если write возвращает false, он запустит событие drain
.
Ни одно из этих решений не работает для меня. process.stdout.write('ok\033 [0G') и просто используя '\ r' просто создайте новую строку, не перезаписывайте, Mac OSX 10.9.2
EDIT: мне пришлось использовать это, чтобы заменить текущую строку
process.stdout.write( '\ 033 [0G'); process.stdout.write( 'NewStuff');
У меня возникла ошибка при использовании строгого режима.
Node error: "Октальные литералы запрещены в строгом режиме".
Я нашел ответ здесь: https://github.com/SBoudrias/Inquirer.js/issues/111
process.stdout.write( "получено:" + bytesReceived + "\ x1B [0G" );