"process.stdout. "在node.js中写入“和”console.log“?
EDIT:使用console.log作为变量显示了许多不可读的字符,而使用process.stdout.write显示了一个对象。
为什么呢?
"process.stdout. "在node.js中写入“和”console.log“?
EDIT:使用console.log作为变量显示了许多不可读的字符,而使用process.stdout.write显示了一个对象。
为什么呢?
当前回答
实现process.sdout。Write, process. sout . Write是一个直接输出到控制台的缓冲区/流。
根据我的puglin serverline: console = new console (consoleOptions),您可以用自己的readline系统重写console类。
你可以看到console.log的源代码:
第十四节。X - lib/internal/console/constructor.js; 对于旧版本:v10.0.0 - lib/console.js。
更多信息:
readline。创建你的自定义行为或使用控制台输入。
其他回答
这个上下文中另一个重要的区别是process.stdout.clearLine()和process.stdout.cursorTo(0)。
如果您想在一行中显示下载或处理的百分比,这将非常有用。如果你使用clearLine(), cursorTo()与console.log(),它不会工作,因为它也附加\n到文本。试试这个例子:
var totalTime = 5000;
var waitInterval = totalTime / 10;
var currentInterval = 0;
function showPercentage(percentage){
process.stdout.clearLine()
process.stdout.cursorTo(0)
console.log(`Processing ${percentage}%...` ) // Replace this line with process.stdout.write(`Processing ${percentage}%...`)
}
var interval = setInterval(function(){
currentInterval += waitInterval
showPercentage((currentInterval / totalTime) * 100)
}, waitInterval)
setTimeout(function(){
clearInterval(interval)
}, totalTime + 100)
Console.log()每次调用它都会添加大量内容和新行
Process.stdout.write()只是纯文本,没有格式
至少我是这么被教导的
实现process.sdout。Write, process. sout . Write是一个直接输出到控制台的缓冲区/流。
根据我的puglin serverline: console = new console (consoleOptions),您可以用自己的readline系统重写console类。
你可以看到console.log的源代码:
第十四节。X - lib/internal/console/constructor.js; 对于旧版本:v10.0.0 - lib/console.js。
更多信息:
readline。创建你的自定义行为或使用控制台输入。
我刚刚注意到,在获得https帮助后,在研究这个问题时。申请邮寄方式。我想分享一些帮助你理解的信息。
Process.stdout.write不会添加新行,而console.log会,就像其他人提到的那样。但是还有一个例子更容易解释。
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write (d);将正确地打印数据而不需要新行。然而console.log(d)将打印一个新行,但数据不会正确显示,给出这个<Buffer 12 34 56…为例。
为了使console.log(d)正确地显示信息,我必须这样做。
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
所以:
Process.stdout.write在检索数据时连续打印信息,不添加新行。 log打印在检索点获得的信息,并添加新行。
我只能这么解释了。
对于那些喜欢Deno的人,我可以通过使用下面的ANSI转义序列和Deno版本的process.stdout.write来实现这一点。
ESC[2K clears entire line
ESC[#G moves cursor to column #
Code
/*
Console.log() to the same line
Supported in Deno 1.8.1
*/
const myTextEncoder : TextEncoder = new TextEncoder();
let counter : number = 0;
while(counter < 100000) {
// ESC[2K clears entire line
await Deno.stdout.write(myTextEncoder.encode(`\x1b[2K`));
// ESC[#G moves cursor to column #
await Deno.stdout.write(myTextEncoder.encode(`\x1b[0G`));
// OUTPUT incremented counter
await Deno.stdout.write(myTextEncoder.encode(`COUNTER: ${counter++}`));
}