programing

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

mailnote 2023. 5. 26. 22:08
반응형

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

위의 @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다음 인쇄 문 앞에서 대체 문자열이 이전 문을 덮어쓰기 직전에 커서가 재설정됩니다.

Windows 콘솔(Linux도 마찬가지)에서는'\r'그 등가코드로.\033[0G:

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

이 명령은 VT220 단자 이스케이프 시퀀스를 사용하여 커서를 첫 번째 열로 보냅니다.

다음과 같은 많은 답변이 제시된 것으로 보입니다.

process.stdout.write

오류 로그는 다음에서 내보내야 합니다.

process.stderr

대신 다음을 사용합니다.

console.error

왜 그런지 궁금해하는 사람들을 위해process.stdout.write('\033[0G');아무 것도 하지 않았습니다. 왜냐하면.stdout버퍼링되어 있으므로 기다리셔야 합니다.drain이벤트(자세한 정보).

쓰기가 반환되는 경우false그것은 발사할 것입니다.drain사건의

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

이 해결책들 중 어느 것도 나에게 효과가 없습니다.process.stdout.write('ok\033[0G')그리고 그냥 사용하는 것.'\r'새 줄을 만들기만 하면 되지만 Mac OS X 10.9.2에서는 덮어쓰지 않습니다.

편집: 현재 줄을 바꾸기 위해 사용해야 했습니다.

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

strict 모드를 사용할 때 다음 오류가 발생했습니다.

노드 오류: "엄격 모드에서는 8진수 리터럴을 사용할 수 없습니다."

다음 솔루션이 작동합니다(소스).

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

Linux 및 Windows, strict 모드 및 non strict 모드에서 모두 작동하고 인쇄할 때마다 줄을 완전히 지우려면 다음을 사용합니다.

const str = 'Hi there'
process.stdout.write(str.padEnd(50) + '\x1b[0G')

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

반응형