NodeJS的stdout刷新?

时间:2012-09-20 10:34:13

标签: node.js

对于nodejs有没有像python或其他语言一样的stdout flush?

sys.stdout.write('some data')

sys.stdout.flush()

现在我只看到{j}的process.stdout.write()

4 个答案:

答案 0 :(得分:15)

process.stdout是一个WritableStream对象,方法WritableStream.write()会自动刷新流(除非它被明确地塞住)。但是,如果刷新成功,它将返回true,如果内核缓冲区已满并且它还无法写入,则返回false。如果您需要连续多次写入,则应该处理drain事件。

请参阅the documentation for write

答案 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功能,因为它会清除屏幕,如果您放置后将看不到任何输出