Czy jest jakikolwiek spudułek dla nodejów, takich jak python lub inne języki?Stdout flush dla NodeJS?
sys.stdout.write('some data')
sys.stdout.flush()
W tej chwili widziałem tylko process.stdout.write()
dla nodejs.
Czy jest jakikolwiek spudułek dla nodejów, takich jak python lub inne języki?Stdout flush dla NodeJS?
sys.stdout.write('some data')
sys.stdout.flush()
W tej chwili widziałem tylko process.stdout.write()
dla nodejs.
process.stdout
to obiekt WritableStream
, a metoda WritableStream.write()
automatycznie opróżnia strumień (chyba że został wyraźnie zakorkowany). Jednakże zwróci wartość true, jeśli flush zakończył się pomyślnie, i false, jeśli bufor jądra był pełny i nie może jeszcze pisać. Jeśli chcesz pisać kilka razy z rzędu, powinieneś obsłużyć zdarzenie drain
.
Zobacz the documentation for write
.
write zwraca true
jeśli dane zostały opróżnione. Jeśli zwróci false
, możesz poczekać na wydarzenie "drenaż".
Myślę, że nie ma flush
, ponieważ byłaby to operacja blokująca.
W nowszych wersjach NodeJS, można przekazać wywołania zwrotnego do .write()
, która zostanie wywołana, gdy dane jest zaczerwieniona:
sys.stdout.write('some data',() => {
console.log('The data has been flushed');
});
To jest dokładnie taka sama, jak sprawdzenie .write()
wynik i rejestracji na wydarzenie drain
:
var write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain',() => {
console.log('The data has been flushed');
});
}
jest jeszcze inna funkcja stdout
który wyczyścić ostatnie wyjście do terminala, który jest rodzaj pracy jak 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
będzie przesunąć kursor do pozycji 0
który jest punktem wyjścia
użyć funkcji flush
przed stdout.write
ponieważ będzie to wyczyścić ekran, jeśli umieścić po nie ma wyniku
Stream .write() jest już operacją blokującą. – jrajav
@Kiyura Prawie prawo. Stream.write nie blokuje, ale na standardowe wyjście zazwyczaj jest: http://nodejs.org/api/process.html#process_process_stdout Dzięki, nie wiedziałem o tym. – Ishtar
Rozumiem. Tak naprawdę nie wiedziałem, tak czy inaczej, ale założyłem, że musiałoby to być zablokowane przynajmniej do tego, co napisał do bufora jądra. Domyślam się, że to nie jest "wystarczająco blokujące", aby liczyć zgodnie z Węzłem. :) – jrajav