Qual é a diferença entre "process.stdout.write" e "console.log" no node.js?
EDIT: O uso do console.log para uma variável mostrou muitos caracteres ilegíveis enquanto o processo.stdout.write mostrou um objeto.
Por que é que?
javascript
node.js
ajsie
fonte
fonte
Respostas:
console.log()
chamadasprocess.stdout.write
com saída formatada. Vejaformat()
no console.js a implementação.Atualmente (v0.10.ish):
fonte
console.log()
aparece para adicionar uma nova linhaOlhando para os documentos do Nó, aparentemente console.log é apenas process.stdout.write com uma quebra de linha no final:
Fonte: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
fonte
Sei que essa é uma pergunta muito antiga, mas não vi ninguém falando sobre a principal diferença entre
process.stdout.write
econsole.log
e só quero mencioná-la.Como Mauvis Leford e TK-421 apontaram, o personagem
console.log
adiciona umline-break
caractere no final da linha (\n
), mas isso não é tudo o que faz.O código não mudou desde pelo menos a
0.10.X
versão e agora temos uma5.X
versão.Aqui está o código:
Como você pode ver, há uma parte que diz
.apply(this, arguments)
e faz uma grande diferença na funcionalidade. É mais fácil explicar isso com exemplos:process.stdout.write
tem uma funcionalidade muito básica, você pode simplesmente escrever algo lá, assim:Se você não colocar a linha de interrupção no final, obterá um caractere estranho após a string, algo como isto:
(Eu acho que isso significa algo como "o final do programa", então você o verá apenas se você tiver
process.stdout.write
sido usado no final do seu arquivo e não tiver adicionado a linha de interrupção)Por outro lado,
console.log
pode fazer mais.Você pode usá-lo da mesma maneira
console.log("Hello World"); //You don't need the break line here because it was already formated
e também esse personagem estranho desapareceuVocê pode escrever mais de uma string
console.log("Hello", "World");
Você pode fazer associações
console.log("Hello %s", "World") //Useful when "World" is inside a variable
E é isso, essa funcionalidade adicional é dada graças à
util.format.apply
parte (eu poderia falar muito sobre o que exatamente isso faz, mas você entende meu ponto, pode ler mais aqui ).Espero que alguém ache essa informação útil.
fonte
stdout.write
e evitar o uso de # #%
%
no final simplesmente chamandoprocess.stdout.write('\n');
no final do meu loop (se tiver por exemplo)%
é apenas a maneira do shell dizer que não há nova linha no final do arquivo.%
no arquivoUma grande diferença que não foi mencionada é que process.stdout usa apenas strings como argumentos (também podem ser fluxos de canal), enquanto console.log usa qualquer tipo de dados Javascript.
por exemplo:
fonte
Outra diferença importante nesse contexto seria com
process.stdout.clearLine()
eprocess.stdout.cursorTo(0)
.Isso seria útil se você deseja mostrar a porcentagem de download ou processamento na única linha. Se você usar clearLine (), cursorTo () com
console.log()
ele não funcionará, porque também anexará \ n ao texto. Apenas tente este exemplo:fonte
Acabei de perceber algo ao pesquisar isso depois de obter ajuda com https.request para o método post. Pensei em compartilhar algumas informações para ajudar a entender.
process.stdout.write
não adiciona uma nova linha enquanto adicionaconsole.log
, como outros mencionaram. Mas há também isso que é mais fácil de explicar com exemplos.process.stdout.write(d);
imprimirá os dados corretamente sem uma nova linha. No entantoconsole.log(d)
, imprimirá uma nova linha, mas os dados não serão exibidos corretamente, fornecendo isso,<Buffer 12 34 56...
por exemplo.Para fazer
console.log(d)
mostrar as informações corretamente, eu teria que fazer isso.Então, basicamente:
process.stdout.write
imprime continuamente as informações como os dados sendo recuperados e não adiciona uma nova linha.console.log
imprime as informações obtidas no ponto de recuperação e adiciona uma nova linha.Essa é a melhor maneira de explicar.
fonte
A diferença simples é: os métodos console.log () acrescentam automaticamente o novo caractere de linha. Isso significa que, se estivermos repetindo e imprimindo o resultado, cada resultado será impresso em uma nova linha.
Os métodos process.stdout.write () não acrescentam novos caracteres de linha. útil para imprimir padrões.
fonte
O console.log implementa process.sdout.write, process.sdout.write é um buffer / fluxo que será gerado diretamente no console.
De acordo com a minha puglin serverline :
console = new Console(consoleOptions)
você pode reescrever classe Console com seu próprio readline sistema.Você pode ver a fonte de código do console.log:
Ver mais :
fonte