nodejs是否有像python或其他语言那样的stdout刷新?
sys.stdout.write('some data') sys.stdout.flush()
现在我只看到nodejs的process.stdout.write()。
process.stdout.write()
5lwkijsr1#
process.stdout是一个WritableStream对象,WritableStream.write()方法自动刷新流(除非它被显式地堵塞)。但是,如果刷新成功,它将返回true,如果内核缓冲区已满,它还不能写入,它将返回false。如果你需要连续写入几次,你应该处理drain事件。请参阅write的文档。
process.stdout
WritableStream
WritableStream.write()
drain
write
xam8gpfp2#
在较新的NodeJS版本中,您可以向.write()传递回调,该回调将在数据刷新后调用:
.write()
sys.stdout.write('some data', () => { console.log('The data has been flushed'); });
这与检查.write()结果并注册到drain事件完全相同:
let write = sys.stdout.write('some data'); if (!write) { sys.stdout.once('drain', () => { console.log('The data has been flushed'); }); }
gdx19jrr3#
如果数据已刷新,write将返回true。如果返回false,则可以等待“drain”事件。我认为没有flush,因为那将是一个阻塞操作。
true
false
flush
wgx48brx4#
还有另一个函数stdout,用于清除终端的最后输出,类似于flush
stdout
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在stdout.write之前使用flush函数,因为它将清除屏幕,如果放在之后,将看不到任何输出
cursorTo
0
stdout.write
4条答案
按热度按时间5lwkijsr1#
process.stdout
是一个WritableStream
对象,WritableStream.write()
方法自动刷新流(除非它被显式地堵塞)。但是,如果刷新成功,它将返回true,如果内核缓冲区已满,它还不能写入,它将返回false。如果你需要连续写入几次,你应该处理drain
事件。请参阅
write
的文档。xam8gpfp2#
在较新的NodeJS版本中,您可以向
.write()
传递回调,该回调将在数据刷新后调用:这与检查
.write()
结果并注册到drain
事件完全相同:gdx19jrr3#
如果数据已刷新,write将返回
true
。如果返回false
,则可以等待“drain”事件。我认为没有
flush
,因为那将是一个阻塞操作。wgx48brx4#
还有另一个函数
stdout
,用于清除终端的最后输出,类似于flush
cursorTo
会将光标移动到起点位置0
在
stdout.write
之前使用flush
函数,因为它将清除屏幕,如果放在之后,将看不到任何输出