nodejs - Node.js: imprimiendo en la consola sin una nueva línea final?
nodejs printer (8)
Además, si desea sobrescribir los mensajes en la misma línea, por ejemplo, en una cuenta regresiva, puede agregar ''/ r'' al final de la cadena.
process.stdout.write("Downloading " + data.length + " bytes/r");
¿Hay algún método para imprimir en la consola sin una nueva línea final? La documentation objeto console
no dice nada al respecto:
console.log()
Imprime a stdout con nueva linea. Esta función puede tomar múltiples argumentos de forma similar a
printf()
. Ejemplo:
console.log(''count: %d'', count);
Si los elementos de formateo no se encuentran en la primera cadena, se usa
util.inspect
en cada argumento.
Como expansión / mejora de la brillante adición realizada por @rodowi en lo que respecta a poder sobrescribir una fila:
process.stdout.write("Downloading " + data.length + " bytes/r");
Si no desea que el cursor del terminal se ubique en el primer carácter, como vi en mi código, considere hacer lo siguiente:
let dots = ''''
process.stdout.write(`Loading `)
let tmrID = setInterval(() => {
dots += ''.''
process.stdout.write(`/rLoading ${dots}`)
}, 1000)
setTimeout(() => {
clearInterval(tmrID)
console.log(`/rLoaded in [3500 ms]`)
}, 3500)
Al colocar la /r
frente a la siguiente declaración de impresión, el cursor se restablece justo antes de que la cadena de reemplazo sobrescriba la anterior.
En la consola de Windows (Linux, también), debe reemplazar ''/ r'' con su código equivalente / 033 [0G :
process.stdout.write(''ok/033[0G'');
Esto utiliza una secuencia de escape de terminal VT220 para enviar el cursor a la primera columna.
Ninguna de estas soluciones funciona para mí. process.stdout.write (''ok / 033 [0G'') y simplemente usando ''/ r'' solo cree una nueva línea, no sobrescriba, Mac OSX 10.9.2
EDIT: tuve que usar esto para reemplazar la línea actual
process.stdout.write (''/ 033 [0G''); process.stdout.write (''newstuff'');
Parece que hay muchas respuestas que sugieren process.stdout.write
. Los registros de errores deberían emitirse en process.stderr
lugar (Use console.error
). Para cualquiera que se pregunte por qué process.stdout.write (''/ 033 [0G''); no estaba haciendo nada, es porque stdout está almacenado en búfer y debe esperar drain
evento de drain
(consulte la sección Descarga de Stdout para NodeJS? ). Si la escritura devuelve false, se activará un evento de drain
.
Puedes usar process.stdout.write()
:
process.stdout.write("hello: ");
Consulte la documentación para más detalles .
Tengo un error cuando uso el modo estricto.
Error de nodo: "Los literales octales no están permitidos en modo estricto".
Encontré la respuesta aquí: https://github.com/SBoudrias/Inquirer.js/issues/111
process.stdout.write ("recibido:" + bytes Recibido + "/ x1B [0G");
También se puede usar util.print . Lea: http://nodejs.org/api/util.html#util_util_print
util.print ([...]) # Una función de salida síncrona. Bloqueará el proceso, convertirá cada argumento en una cadena y luego dará salida a la salida estándar. No coloca nuevas líneas después de cada argumento.
Un ejemplo:
// get total length
var len = parseInt(response.headers[''content-length''], 10);
var cur = 0;
// handle the response
response.on(''data'', function(chunk) {
cur += chunk.length;
util.print("Downloading " + (100.0 * cur / len).toFixed(2) + "% " + cur + " bytes/r");
});