"process.stdout. "在node.js中写入“和”console.log“?

EDIT:使用console.log作为变量显示了许多不可读的字符,而使用process.stdout.write显示了一个对象。

为什么呢?


当前回答

我刚刚注意到,在获得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打印在检索点获得的信息,并添加新行。

我只能这么解释了。

其他回答

查看Node文档,显然console.log只是process.stdout.write,在结尾加一个换行符:

console.log = function (d) {
  process.stdout.write(d + '\n');
};

来源:http://nodejs.org/docs/v0.3.1/api/process.html process.stdout

我刚刚注意到,在获得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打印在检索点获得的信息,并添加新行。

我只能这么解释了。


实现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。具体实现请参见console.js中的format()。

目前(v0.10.ish):

Console.prototype.log = function() {
  this._stdout.write(util.format.apply(this, arguments) + '\n');
};