node.js에서 “process.stdout.write”와 “console.log”의 차이점은 무엇입니까?
편집 : 변수에 console.log를 사용하면 process.stdout.write를 사용하는 동안 읽을 수없는 많은 문자가 표시되었습니다.
왜 그런 겁니까?
답변
console.log()
process.stdout.write
형식화 된 출력으로 호출 합니다. 보다format()
구현에 console.js를 .
현재 (v0.10.ish) :
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
답변
노드 문서를 보면 분명히 console.log는 process.stdout.write이며 끝에 줄 바꿈이 있습니다.
console.log = function (d) {
process.stdout.write(d + '\n');
};
출처 : http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
답변
나는 이것이 아주 오래된 질문 알고하지만 난 사이의 주요 차이점에 대해 이야기 누구를 보지 못했다 process.stdout.write
과console.log
난 그냥 그것을 언급하고 싶다.
으로 Mauvis Leford 및 TK-421는 지적의는 console.log
추가한다 line-break
(행의 끝에 문자 \n
)하지만 그것이 무엇 모두가 아니다.
코드는 최소한 0.10.X
버전 이후로 변경되지 않았 으며 이제 5.X
버전이 있습니다.
코드는 다음과 같습니다 .
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
보시다시피, 말하는 부분이 있습니다 .apply(this, arguments)
기능에 큰 차이를 만드는 있습니다. 예제를 통해 설명하기가 더 쉽습니다.
process.stdout.write
매우 기본적인 기능을 가지고 있으며, 다음과 같이 무언가를 작성할 수 있습니다.
process.stdout.write("Hello World\n");
끝에 줄 바꿈을 넣지 않으면 문자열 뒤에 이상한 문자가 나타납니다.
process.stdout.write("Hello World"); //Hello World%
(이것은 “프로그램의 끝”과 같은 것을 의미한다고 생각합니다. 따라서 process.stdout.write
파일의 끝에 사용되었고 브레이크 라인을 추가하지 않은 경우에만 볼 수 있습니다)
반면에 console.log
더 많은 일을 할 수 있습니다.
-
같은 방식으로 사용할 수 있습니다
console.log("Hello World"); //You don't need the break line here because it was already formated
또한 그 이상한 캐릭터가 사라졌습니다 -
하나 이상의 문자열을 쓸 수 있습니다
console.log("Hello", "World");
-
당신은 협회를 만들 수 있습니다
console.log("Hello %s", "World") //Useful when "World" is inside a variable
그것이 추가 된 기능 덕분에 추가 기능이 제공됩니다 util.format.apply
(정확히하는 일에 대해 많이 이야기 할 수는 있지만 내 요점을 알면 여기에서 더 읽을 수 있습니다 ).
누군가이 정보가 도움이되기를 바랍니다.
답변
언급되지 않은 한 가지 큰 차이점은 process.stdout 은 문자열을 인수로만 사용하고 (파이프 스트림 일 수도 있음) console.log 는 모든 Javascript 데이터 유형을 사용한다는 것입니다.
예 :
// ok
console.log(null)
console.log(undefined)
console.log('hi')
console.log(1)
console.log([1])
console.log({one:1})
console.log(true)
console.log(Symbol('mysymbol'))
// any other data type passed as param will throw a TypeError
process.stdout.write('1')
// can also pipe a readable stream (assuming `file.txt` exists)
const fs = require('fs')
fs.createReadStream('file.txt').pipe(process.stdout)
답변
이 맥락에서 또 다른 중요한 차이점은 process.stdout.clearLine()
와process.stdout.cursorTo(0)
.
한 줄에 다운로드 또는 처리 비율을 표시하려는 경우에 유용합니다. clearLine ()을 사용하는 경우 cursorTo () console.log()
는 텍스트에 \ n을 추가하기 때문에 작동하지 않습니다. 이 예제를 시도해보십시오.
var waitInterval = 500;
var totalTime = 5000;
var currentInterval = 0;
function showPercentage(percentage){
process.stdout.clearLine();
process.stdout.cursorTo(0);
console.log(`Processing ${percentage}%...` ); //replace this line with process.stdout.write(`Processing ${percentage}%...`);
}
var interval = setInterval(function(){
currentInterval += waitInterval;
showPercentage((currentInterval/totalTime) * 100);
}, waitInterval);
setTimeout(function(){
clearInterval(interval);
}, totalTime);
답변
post 메소드에 대한 https.request에 대한 도움을 얻은 후 이것을 조사하는 동안 무언가를 발견했습니다. 이해하는 데 도움이되는 정보를 공유한다고 생각했습니다.
process.stdout.write
console.log
다른 사람들이 언급했듯이 새 줄을 추가하지 않습니다 . 그러나 예제로 설명하기가 더 쉽습니다.
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);
줄 바꿈없이 데이터를 올바르게 인쇄합니다. 하나console.log(d)
새 줄을 인쇄하지만 데이터가 올바르게 표시되지 않아서<Buffer 12 34 56...
예를 들어 나타냅니다.
console.log(d)
정보를 올바르게 표시 하려면 이 작업을 수행해야합니다.
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
그래서 기본적으로:
-
process.stdout.write
검색중인 데이터로 정보를 지속적으로 인쇄하고 새 줄을 추가하지 않습니다. -
console.log
검색 시점에서 얻은 정보를 인쇄하고 새 줄을 추가합니다.
그것이 내가 설명 할 수있는 가장 좋은 방법입니다.
답변
간단한 차이점은 다음과 같습니다.
console.log () 메서드는 자동으로 줄 바꿈 문자를 추가합니다. 반복해서 결과를 인쇄하면 각 결과가 새 줄로 인쇄됩니다.
process.stdout.write () 메소드는 줄 바꾸기 문자를 추가하지 않습니다. 패턴 인쇄에 유용합니다.