2012-09-20 34 views
16

pythonや他の言語のようにnodejsのためのstdoutフラッシュはありますか?NodeJSの標準出力フラッシュ?

sys.stdout.write('some data') 

sys.stdout.flush() 

ここで私はnodejsのためにprocess.stdout.write()を見ました。

答えて

9

process.stdoutWritableStreamオブジェクトであり、メソッドWritableStream.write()は自動的にストリームをフラッシュします(明示的にコルク化されていない限り)。ただし、フラッシュが成功した場合はtrueを返し、カーネルバッファが一杯でまだ書き込めない場合はfalseを返します。複数回連続して書き込む必要がある場合は、drainイベントを処理する必要があります。

the documentation for writeを参照してください。

新しいNodeJSバージョンで
1

writeデータがフラッシュされた場合はtrueを返します。 falseが返ってきたら、 'drain'イベントを待つことができます。

ブロック操作であるため、flushはありません。

+0

ストリームは表示されませんした後、あなたが入れた場合の出発点

は、stdout.writeflush機能を使用している0を位置にカーソルを移動します.write()はすでにブロック動作です。 – jrajav

+0

@Kiyuraほぼ正しい。 Stream.writeはブロックされていませんが、stdoutの場合、通常は次のようになります。http://nodejs.org/api/process.html#process_process_stdoutありがとうございました。 – Ishtar

+0

私は参照してください。私は正直言ってどちらの方法も本当に知っていませんでしたが、少なくともカーネルバッファに書いた点でブロックしなければならないと仮定しました。私はそれがノードに基づいて数えるために「十分にブロックされていない」と推測します。 :) – jrajav

3

、あなたはデータがフラッシュされると呼び出されますされ、.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'); 
    }); 
} 
-1

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は、画面がクリアされますので、あなたが任意の出力

関連する問題