¿Hay alguna descarga stdout para nodejs como python u otros lenguajes?Stdout flush para NodeJS?
sys.stdout.write('some data')
sys.stdout.flush()
En este momento sólo vi process.stdout.write()
para nodejs.
¿Hay alguna descarga stdout para nodejs como python u otros lenguajes?Stdout flush para NodeJS?
sys.stdout.write('some data')
sys.stdout.flush()
En este momento sólo vi process.stdout.write()
para nodejs.
process.stdout
es un objeto WritableStream
, y el método WritableStream.write()
automáticamente vacía la secuencia (a menos que esté explícitamente tapada). Sin embargo, volverá a ser verdadero si el borrado fue exitoso, y falso si el buffer del núcleo estaba lleno y no puede escribir todavía. Si necesita escribir varias veces seguidas, debe manejar el evento drain
.
write devuelve true
si los datos se han purgado. Si devuelve false
, puede esperar el evento 'drain'.
Creo que no hay flush
, porque eso sería una operación de bloqueo.
En las versiones más recientes nodejs, puede pasar una devolución de llamada a .write()
, que se llamará una vez que los datos se vacía:
sys.stdout.write('some data',() => {
console.log('The data has been flushed');
});
Ésta es exactamente la misma que la comprobación .write()
resultado y el registro al evento drain
:
var write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain',() => {
console.log('The data has been flushed');
});
}
Hay otra función stdout
para borrar la última salida a la terminal que es una especie de obra como 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
el cursor se moverá a la posición 0
que es el punto de partida
utilizar la función flush
antes stdout.write
porque va a borrar la pantalla, si se pone después de que usted no verá ninguna salida
Corriente .write() ya es una operación de bloqueo. – jrajav
@Kiyura Casi a la derecha. Stream.write no está bloqueando, pero para stdout usualmente es: http://nodejs.org/api/process.html#process_process_stdout Gracias, no lo sabía. – Ishtar
Ya veo. Realmente no sabía de ninguna manera, para ser sincero, pero supuse que tendría que estar bloqueando al menos el punto que escribía en el búfer del kernel. Supongo que eso no es "bloqueo suficiente" para que cuente según Nodo. :) – jrajav