对于nodejs有没有像python或其他语言一样的stdout flush?
sys.stdout.write('some data')
sys.stdout.flush()
现在我只看到{j}的process.stdout.write()
。
答案 0 :(得分:15)
process.stdout
是一个WritableStream
对象,方法WritableStream.write()
会自动刷新流(除非它被明确地塞住)。但是,如果刷新成功,它将返回true,如果内核缓冲区已满并且它还无法写入,则返回false。如果您需要连续多次写入,则应该处理drain
事件。
答案 1 :(得分:8)
在较新的NodeJS版本中,您可以将回调传递给test2()
,这将在刷新数据后调用:
.write()
这与检查sys.stdout.write('some data', () => {
console.log('The data has been flushed');
});
结果并注册.write()
事件完全相同:
drain
答案 2 :(得分:1)
write将返回true
。如果它返回false
,您可以等待'drain'事件。
我认为没有flush
,因为那将是一个阻止操作。
答案 3 :(得分:-1)
还有另一个函数stdout
用于清除终端的最后一个输出,这类似于flush
function flush() {
process.stdout.clearLine();
process.stdout.cursorTo(0);
}
var total = 5000;
var current = 0;
var percent = 0;
var waitingTime = 500;
setInterval(function() {
current += waitingTime;
percent = Math.floor((current / total) * 100);
flush();
process.stdout.write(`downloading ... ${percent}%`);
if (current >= total) {
console.log("\nDone.");
clearInterval(this);
}
}, waitingTime);
cursorTo
会将光标移动到位置0
,这是起点
在flush
之前使用stdout.write
功能,因为它会清除屏幕,如果您放置后将看不到任何输出