¿Cuál es la diferencia entre "process.stdout.write" y "console.log" en node.js?
EDITAR: El uso de console.log para una variable mostró muchos caracteres ilegibles mientras que el proceso.stdout.write mostró un objeto.
¿Porqué es eso?
javascript
node.js
ajsie
fuente
fuente
Respuestas:
console.log()
llamadasprocess.stdout.write
con salida formateada. Verformat()
en console.js para la implementación.Actualmente (v0.10.ish):
fuente
console.log()
parece agregar una nueva líneaAl mirar los documentos del nodo, aparentemente console.log es solo process.stdout.write con un salto de línea al final:
Fuente: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
fuente
Sé que esta es una pregunta muy antigua, pero no vi a nadie hablando sobre la diferencia principal entre
process.stdout.write
yconsole.log
solo quiero mencionarla.Como señalaron Mauvis Leford y TK-421 ,
console.log
agrega unline-break
personaje al final de la línea (\n
), pero eso no es todo lo que hace.El código no ha cambiado desde al menos la
0.10.X
versión y ahora tenemos una5.X
versión.Aquí está el código:
Como puede ver, hay una parte que dice
.apply(this, arguments)
y que hace una gran diferencia en la funcionalidad. Es más fácil explicar eso con ejemplos:process.stdout.write
tiene una funcionalidad muy básica, puedes escribir algo allí, como este:Si no pones la línea de ruptura al final, obtendrás un personaje extraño después de tu cadena, algo como esto:
(Creo que eso significa algo así como "el final del programa", por lo que lo verá solo si
process.stdout.write
se utilizó al final de su archivo y no agregó la línea de corte)Por otro lado,
console.log
puede hacer más.Puedes usarlo de la misma manera
console.log("Hello World"); //You don't need the break line here because it was already formated
y también ese extraño personaje desaparecióPuedes escribir más de una cadena
console.log("Hello", "World");
Puedes hacer asociaciones
console.log("Hello %s", "World") //Useful when "World" is inside a variable
Y eso es todo, esa funcionalidad adicional se da gracias a la
util.format.apply
parte (podría hablar mucho sobre qué hace exactamente esto, pero entiendes mi punto, puedes leer más aquí ).Espero que alguien encuentre útil esta información.
fuente
stdout.write
y evitar el contacto%
%
al final simplemente llamandoprocess.stdout.write('\n');
al final de mi ciclo (si tienes, por ejemplo)%
es solo la forma en que el shell dice que no hay una nueva línea al final del archivo.%
en el archivoUna gran diferencia que no se ha mencionado es que process.stdout solo toma cadenas como argumentos (también se pueden canalizar flujos), mientras que console.log toma cualquier tipo de datos Javascript.
p.ej:
fuente
Otra diferencia importante en este contexto sería con
process.stdout.clearLine()
yprocess.stdout.cursorTo(0)
.Esto sería útil si desea mostrar el porcentaje de descarga o procesamiento en la única línea. Si usa clearLine (), cursorTo () con
console.log()
él no funciona porque también agrega \ n al texto. Solo prueba este ejemplo:fuente
Acabo de notar algo al investigar esto después de obtener ayuda con https.request para el método de publicación. Pensé que comparto algunos aportes para ayudar a entender.
process.stdout.write
no agrega una nueva línea mientras loconsole.log
hace, como otros habían mencionado. Pero también hay esto que es más fácil de explicar con ejemplos.process.stdout.write(d);
imprimirá los datos correctamente sin una nueva línea. Sin embargoconsole.log(d)
, imprimirá una nueva línea pero los datos no se mostrarán correctamente,<Buffer 12 34 56...
por ejemplo.Para
console.log(d)
mostrar la información correctamente, tendría que hacer esto.Así que básicamente:
process.stdout.write
imprime continuamente la información a medida que se recuperan los datos y no agrega una nueva línea.console.log
imprime la información que se obtuvo en el punto de recuperación y agrega una nueva línea.Esa es la mejor manera en que puedo explicarlo.
fuente
La diferencia simple es: los métodos console.log () añaden automáticamente un nuevo carácter de línea. Significa que si estamos recorriendo e imprimiendo el resultado, cada resultado se imprime en una nueva línea.
Los métodos process.stdout.write () no agregan un nuevo carácter de línea. útil para imprimir patrones.
fuente
Console.log implemente process.sdout.write, process.sdout.write es un búfer / flujo que saldrá directamente en su consola.
De acuerdo con mi línea de servidor puglin :
console = new Console(consoleOptions)
puede volver a escribir la clase de consola con su propio sistema de línea de lectura .Puede ver el código fuente de console.log:
Ver más :
fuente