[javascript] node.js의“process.stdout.write”와“console.log”의 차이점은 무엇입니까?

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.writeconsole.log 난 그냥 그것을 언급하고 싶다.

으로 Mauvis LefordTK-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더 많은 일을 할 수 있습니다.

  1. 같은 방식으로 사용할 수 있습니다

    console.log("Hello World"); //You don't need the break line here because it was already formated 또한 그 이상한 캐릭터가 사라졌습니다

  2. 하나 이상의 문자열을 쓸 수 있습니다

    console.log("Hello", "World");

  3. 당신은 협회를 만들 수 있습니다

    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.writeconsole.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 () 메소드는 줄 바꾸기 문자를 추가하지 않습니다. 패턴 인쇄에 유용합니다.