...
child_process
앞서 배운 워커 스레드는 구현이 힘듭니다.
하지만, 노드에서 다른 언어로 만든 서버를 호출 할 수도 있습니다.
싱글스레드의 한계에 봉착하여, 노드 사용을 주저할때 단비 같은 기능입니다.
즉, 하드한 작업은 다른 언어에서 실행하도록하고 그 결과를 노드 서버가 받아서 다시 브라우저로 전달하면 완벽합니다.
const { exec } = require('child_process');
var process = exec('dir'); // 마치 우리가 터미널에서 dir를 치는 거와 같은 역할을 한다.
// 결과물 출력은 반드시 우리가 직접 구현해줘야 한다.
process.stdout.on('data', function (data) {
console.log(data.toString());
});
// 에러 났을 경우
process.stderr.on('data', function (data) {
console.error(data.toString());
});
만일 한글이 깨져 나오면,
cmd /c chcp 65001>nul && dir
명령어를 쳐서 유니코드를 콘솔에 표시하도록 합니다.
spawn.js 에서 test.py 호출 예)
- 단, 다른 언어를 호출 할 때는 해당 언어가 설치되어있어야 합니다.
- 노드는 단지 실행 요청을 하는 것이죠
브라우저(버튼 클릭) => 노드 서버로 전달 => 파이썬 spawn으로 실행 => 결과 노드 서버가 받아서 다시 브라우저한테 전달
// spawn.js 파일
const spawn = require('child_process').spawn;
// 새로운 프로세스를 띄워서 파이썬을 실행
const process = spawn('python', ['test.py']);
process.stdout.on('data', function (data) {
console.log(data.toString());
});
process.stderr.on('data', function (data) {
console.error(data.toString());
});
# test.py 파일
print('hello python')
node spawn 실행 시 출력 결과
> hello python
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.