"process.stdout. "在node.js中写入“和”console.log“?
EDIT:使用console.log作为变量显示了许多不可读的字符,而使用process.stdout.write显示了一个对象。
为什么呢?
"process.stdout. "在node.js中写入“和”console.log“?
EDIT:使用console.log作为变量显示了许多不可读的字符,而使用process.stdout.write显示了一个对象。
为什么呢?
当前回答
这里的答案很好。下面将详述console.log格式化函数的重要性。尚未提到的格式化特性之一是组级别,日志将支持组级别,但stdout不支持组级别。
console.log('Begin...')
console.group()
console.log('Line 2 (console.log)')
process.stdout.write('Line 3 (process.stdout)\n')
console.log('Line 4 (console.log)')
process.stdout.write('Line 5 (process.stdout)') // no newline
console.groupEnd()
console.log('...done')
输出:
Begin...
Line 2 (console.log)
Line 3 (process.stdout)
Line 4 (console.log)
Line 5 (process.stdout)...done
注意,stdout不支持控制台。组格式,并始终写入行首,其中console.log表示分组并适当缩进。
只对日志语句(和一个额外的组)执行相同的操作:
console.log('Begin...')
console.group()
console.log('Line 2 (console.log)')
console.log('Line 3 (console.log)')
console.log('Line 4 (console.log)')
console.log('Line 5 (console.log)')
console.group()
console.log('Line 6 (console.log)')
console.log('Line 7 (console.log)')
console.groupEnd()
console.groupEnd()
console.log('...done')
输出:
Begin...
Line 2 (console.log)
Line 3 (console.log)
Line 4 (console.log)
Line 5 (console.log)
Line 6 (console.log)
Line 7 (console.log)
...done
其他回答
Console.log()使用格式化输出调用process.stdout.write。具体实现请参见console.js中的format()。
目前(v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
简单的区别是: Console.log()方法自动添加新的行字符。这意味着如果我们循环遍历并打印结果,每个结果将在新行中打印。
Process.stdout.write()方法不会追加新的行字符。适用于打印图案。
这个上下文中另一个重要的区别是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格式化函数的重要性。尚未提到的格式化特性之一是组级别,日志将支持组级别,但stdout不支持组级别。
console.log('Begin...')
console.group()
console.log('Line 2 (console.log)')
process.stdout.write('Line 3 (process.stdout)\n')
console.log('Line 4 (console.log)')
process.stdout.write('Line 5 (process.stdout)') // no newline
console.groupEnd()
console.log('...done')
输出:
Begin...
Line 2 (console.log)
Line 3 (process.stdout)
Line 4 (console.log)
Line 5 (process.stdout)...done
注意,stdout不支持控制台。组格式,并始终写入行首,其中console.log表示分组并适当缩进。
只对日志语句(和一个额外的组)执行相同的操作:
console.log('Begin...')
console.group()
console.log('Line 2 (console.log)')
console.log('Line 3 (console.log)')
console.log('Line 4 (console.log)')
console.log('Line 5 (console.log)')
console.group()
console.log('Line 6 (console.log)')
console.log('Line 7 (console.log)')
console.groupEnd()
console.groupEnd()
console.log('...done')
输出:
Begin...
Line 2 (console.log)
Line 3 (console.log)
Line 4 (console.log)
Line 5 (console.log)
Line 6 (console.log)
Line 7 (console.log)
...done
一个没有被提及的巨大区别是这个过程。stdout只接受字符串作为参数(也可以是管道流),而console.log接受任何Javascript数据类型。
e.g:
// 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)