개발자
Node.js에서 child_process 모듈의 spawn 함수로 실행한 프로세스의 stderr이나 stdout 값을 스트림으로 즉시 받을 수 있는 방법이 있을까요? 프로세스가 다 끝나고 나서야 한 번에 몰려서 넘어오네요 ㅠㅠ
답변 1
Node.js에서 ' child_process ' 모듈의 ' spawn ' 함수를 사용하여 실행한 프로세스의 ' stderr ' 또는 ' stdout ' 값을 스트림으로 즉시 받으려면 이벤트 리스너를 설정하면 됩니다. 코드 예제에서 ' child.stderr.on('data', (data) => console.log(data)) ' 부분은 이미 올바르게 작성된 것으로 보입니다. 다만, 문제가 발생하는 경우는 프로세스의 출력이 버퍼링되어 한 번에 전달되는 경우일 수 있습니다. 이를 해결하기 위해 프로세스의 출력이 즉시 플러시되도록 강제할 수 있습니다. #1 예를 들어, 실행하려는 ' sample.js ' 파일에서 ' console.log() ' 대신 ' process.stdout.write() '를 사용하여 출력을 플러시할 수 있습니다. 또한, 프로세스의 출력을 표준 출력으로 리다이렉션하는 경우 버퍼링이 발생할 수 있습니다. 이 경우, 리다이렉션 시 ' stdbuf ' 명령을 사용하여 버퍼링을 비활성화할 수 있습니다. #2는 ' stdbuf '를 사용하여 버퍼링을 비활성화하는 예제입니다. 아래 예제에서 ' stdbuf -o0 -e0 ' 옵션은 표준 출력(stdout)과 표준 에러(stderr) 모두 비활성화된 버퍼링을 의미합니다. 이렇게 설정하면 프로세스의 출력이 즉시 스트림으로 전달되어야 합니다.
1 2 3 4 5 6 7 8 9 10
#1 // sample.js 파일 process.stdout.write("Hello, World!\n"); #2 const { spawn } = require('child_process'); const child = spawn('sh', ['-c', 'stdbuf -o0 -e0 node sample.js']); child.stdout.on('data', (data) => console.log(data.toString())); child.stderr.on('data', (data) => console.error(data.toString()));
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!