Difference between “process.stdout.write” and “console.log” in node.js?
node.js中的"process.stdout.write"和"console.log"有什么区别?
编辑:在使用process.stdout.write显示对象时,对变量使用console.log会显示许多不可读的字符。
为什么会这样?
目前(v0.10.ish):
1 2 3 4 | Console.prototype.log = function() { this._stdout.write(util.format.apply(this, arguments) + ' '); }; |
显然,查看节点docs console.log只是process.stdout.write,末尾有一个换行符:
1 2 3 4 | console.log = function (d) { process.stdout.write(d + ' '); }; |
来源:http://nodejs.org/docs/v0.3.1/api/process.html process.stdout
我知道这是一个很古老的问题,但我没看到有人谈论过
正如Mauvis Leford和TK-421指出的那样,
至少在
代码如下:
1 2 3 4 | Console.prototype.log = function() { this._stdout.write(util.format.apply(this, arguments) + ' '); }; |
正如您所看到的,有一部分说
1 2 | process.stdout.write("Hello World "); |
如果不将换行符放在末尾,字符串后面会出现一个奇怪的字符,如下所示:
1 | process.stdout.write("Hello World"); //Hello World% |
(我认为这意味着类似于"程序的结束",所以只有当你在文件的结尾使用了
另一方面,
你可以用同样的方法
可以写入多个字符串
你可以建立联系
A就是这样,由于
我希望有人能找到有用的信息。
一个没有提到的大区别是process.stdout只接受字符串作为参数(也可以是管道流),console.log接受任何javascript数据类型。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // ok console.log(null) console.log(undefined) console.log('hi') console.log(1) console.log([1]) console.log({one:1}) console.log(true) console.log(Symbol('mysymbol')) // any other data type passed as param will throw a TypeError process.stdout.write('1') // can also pipe a readable stream (assuming `file.txt` exists) const fs = require('fs') fs.createReadStream('file.txt').pipe(process.stdout) |
在这方面的另一个重要区别是,
如果您只想在一行中显示下载或处理的百分比,这将非常有用。如果将clearline()、cursorto()与
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var waitInterval = 500; var totalTime = 5000; 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); |
我刚刚注意到在获得https.request for post方法的帮助后,在研究这个问题时发现了一些问题。我想我可以分享一些信息来帮助理解。
像其他人提到的那样,
1 2 3 4 5 6 | var req = https.request(options, (res) => { res.on('data', (d) => { process.stdout.write(d); console.log(d) }); }); |
为了使
1 2 3 4 5 6 7 8 9 | 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 在检索数据时连续打印信息,不添加新行。console.log 打印检索点获得的信息,并添加一行新行。
这是我能解释的最好方式。
简单的区别是:console.log()方法自动附加新行字符。这意味着,如果我们循环并打印结果,每个结果都将打印成新行。
process.stdout.write()方法不附加新行字符。用于打印图案。