pythonや他の言語のようにnodejsのためのstdoutフラッシュはありますか?NodeJSの標準出力フラッシュ?
sys.stdout.write('some data')
sys.stdout.flush()
ここで私はnodejsのためにprocess.stdout.write()
を見ました。
pythonや他の言語のようにnodejsのためのstdoutフラッシュはありますか?NodeJSの標準出力フラッシュ?
sys.stdout.write('some data')
sys.stdout.flush()
ここで私はnodejsのためにprocess.stdout.write()
を見ました。
process.stdout
はWritableStream
オブジェクトであり、メソッドWritableStream.write()
は自動的にストリームをフラッシュします(明示的にコルク化されていない限り)。ただし、フラッシュが成功した場合はtrueを返し、カーネルバッファが一杯でまだ書き込めない場合はfalseを返します。複数回連続して書き込む必要がある場合は、drain
イベントを処理する必要があります。
the documentation for write
を参照してください。
writeデータがフラッシュされた場合はtrue
を返します。 false
が返ってきたら、 'drain'イベントを待つことができます。
ブロック操作であるため、flush
はありません。
、あなたはデータがフラッシュされると呼び出されますされ、.write()
にコールバックを渡すことができます。
sys.stdout.write('some data',() => {
console.log('The data has been flushed');
});
これはまさに.write()
結果を確認し、drain
イベントへの登録と同じです。
var write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain',() => {
console.log('The data has been flushed');
});
}
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
は、画面がクリアされますので、あなたが任意の出力
ストリームは表示されませんした後、あなたが入れた場合の出発点
は、
stdout.write
前flush
機能を使用している0
を位置にカーソルを移動します.write()はすでにブロック動作です。 – jrajav@Kiyuraほぼ正しい。 Stream.writeはブロックされていませんが、stdoutの場合、通常は次のようになります。http://nodejs.org/api/process.html#process_process_stdoutありがとうございました。 – Ishtar
私は参照してください。私は正直言ってどちらの方法も本当に知っていませんでしたが、少なくともカーネルバッファに書いた点でブロックしなければならないと仮定しました。私はそれがノードに基づいて数えるために「十分にブロックされていない」と推測します。 :) – jrajav