有没有一种方法可以在没有换行符的情况下打印到控制台?控制台对象文档没有说明这方面的任何内容:
console.log()打印到带有换行符的标准输出。此函数可以以类似printf()的方式接受多个参数。例子:console.log('计数:%d',计数);如果在第一个字符串中找不到格式化元素,则在每个参数上使用util.inspect。
有没有一种方法可以在没有换行符的情况下打印到控制台?控制台对象文档没有说明这方面的任何内容:
console.log()打印到带有换行符的标准输出。此函数可以以类似printf()的方式接受多个参数。例子:console.log('计数:%d',计数);如果在第一个字符串中找不到格式化元素,则在每个参数上使用util.inspect。
当前回答
可以使用process.stdout.write():
process.stdout.write("hello: ");
有关详细信息,请参阅文档。
其他回答
可以使用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");
});
作为上面@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放置在下一个打印语句前面,光标将在替换字符串覆盖前一个之前重置。
在Windows控制台(也是Linux)中,您应该将“\r”替换为其等效代码\033[0G:
process.stdout.write('ok\033[0G');
这使用VT220终端转义序列将光标发送到第一列。