Node.js:打印到控制台没有结尾的换行符?
是否有一个方法打印到控制台没有尾随的换行符? console
对象的文档没有说任何关于这个:
的console.log()
用换行符打印到stdout。 这个函数可以以类似
printf()
的方式接受多个参数。 例:console.log('count: %d', count);
如果在第一个string中没有find格式化元素,则在每个参数上使用
util.inspect
。
你可以使用process.stdout.write()
:
process.stdout.write("hello: ");
有关详细信息,请参阅文档 。
此外,如果您想要覆盖同一行中的邮件,例如倒计时,则可以在string的末尾添加“\ r”。
process.stdout.write("Downloading " + data.length + " bytes\r");
util.print也可以使用。 阅读: http : //nodejs.org/api/util.html#util_util_print
util.print([…])#一个同步输出函数。 将阻止该进程,将每个参数转换为一个string,然后输出到标准输出。 在每个参数之后不放置换行符。
一个例子:
// 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)中,您应该用等同的代码replace'\ r' 。[0G :
process.stdout.write('ok\033[0G');
这使用VT220terminal转义序列将光标发送到第一列。
似乎有很多答案build议process.stdout.write
。 错误日志应该在process.stderr
上发出(使用console.error
)。 对于任何人想知道为什么process.stdout.write('\ 033 [0G'); 没有做任何事情,因为标准输出缓冲,你需要等待drain
事件(请参阅标准输出冲洗的NodeJS? )。 如果写入返回false,它将触发一个drain
事件。
这些解决scheme都不适合我。 process.stdout.write('ok \ 033 [0G'),只需使用'\ r'创build一个新行,不要覆盖,Mac OSX 10.9.2
编辑:我不得不用这个来取代当前行
process.stdout.write( '\ 033 [0G'); process.stdout.write( 'Newstuff文件');
使用严格模式时出现错误。
节点错误:“严格模式下不允许使用八进制文字”。
我在这里find答案: https : //github.com/SBoudrias/Inquirer.js/issues/111
process.stdout.write(“received:”+ bytesReceived +“\ x1B [0G”);