Program Tip

Node.js : 줄 바꿈없이 콘솔에 인쇄 하시겠습니까?

programtip 2020. 10. 2. 23:05
반응형

Node.js : 줄 바꿈없이 콘솔에 인쇄 하시겠습니까?


후행 줄 바꿈없이 콘솔에 인쇄하는 방법이 있습니까? console객체 문서는 것을에 관한 아무 말도하지 않습니다

console.log()

줄 바꿈으로 stdout에 인쇄합니다. 이 함수는 printf()같은 방식으로 여러 인수를 사용할 수 있습니다 . 예:

console.log('count: %d', count);

형식화 요소가 첫 번째 문자열에서 발견되지 않으면 util.inspect각 인수에 사용됩니다.


다음을 사용할 수 있습니다 process.stdout.write().

process.stdout.write("hello: ");

자세한 내용은 문서를 참조하십시오 .


또한 카운트 다운과 같이 같은 줄의 메시지를 덮어 쓰려면 문자열 끝에 '\ r'을 추가 할 수 있습니다.

process.stdout.write("Downloading " + data.length + " bytes\r");

Windows 콘솔 (리눅스도)에서 '\ r'을 동등한 코드 \ 033 [0G로 바꿔야합니다 .

process.stdout.write('ok\033[0G');

이것은 VT220 터미널 이스케이프 시퀀스를 사용하여 커서를 첫 번째 열로 보냅니다.


행을 덮어 쓸 수 있다는 점과 관련하여 위의 @rodowi가 만든 멋진 추가 사항에 대한 확장 / 향상으로 :

process.stdout.write("Downloading " + data.length + " bytes\r");

내 코드에서 본 것처럼 터미널 커서가 첫 번째 문자에 위치하지 않도록하려면 다음을 수행하는 것이 좋습니다.

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)

\r다음 print 문 앞에 를 배치하면 대체 문자열이 이전 문자열을 덮어 쓰기 직전에 커서가 재설정됩니다.


util.print도 사용할 수 있습니다. 읽기 : http://nodejs.org/api/util.html#util_util_print

util.print ([...]) # 동기 출력 함수. 프로세스를 차단하고 각 인수를 문자열로 캐스트 한 다음 stdout으로 출력합니다. 각 인수 뒤에 줄 바꿈을 배치하지 않습니다.

예 :

// 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");
});

There seem to be many answers suggesting process.stdout.write. Error logs should be emitted on process.stderr instead (Use console.error). For anyone who is wonder why process.stdout.write('\033[0G'); wasn't doing anything it's because stdout is buffered and you need to wait for drain event (See Stdout flush for NodeJS?). If write returns false it will fire a drain event.


None of these solutions work for me. process.stdout.write('ok\033[0G') and just using '\r' just create a new line, do not overwrite, Mac OSX 10.9.2

EDIT: I had to use this to replace the current line

process.stdout.write('\033[0G'); process.stdout.write('newstuff');


I got an error when using strict mode.

Node error: "Octal literals are not allowed in strict mode."

I found the answer here: https://github.com/SBoudrias/Inquirer.js/issues/111

process.stdout.write("received: " + bytesReceived + "\x1B[0G");

참고URL : https://stackoverflow.com/questions/6157497/node-js-printing-to-console-without-a-trailing-newline

반응형