노드

노드 child_process

포칼이 2023. 4. 12. 11:45
//exec.js
const exec = require('child_process').exec;

var process = exec('dir');

process.stdout.on('data', function(data) {
  console.log(data.toString());
}); // 실행 결과

process.stderr.on('data', function(data) {
  console.error(data.toString());
}); // 실행 에러

var process = exec('dir);

노드에서도 명령어가 실행되게끔 해준다. 

대신에 결과물은 직접 받아와야 하기 때문에 process.stdout.on을 사용해서 console.log에 담아서 출력했다. 

즉, dir을 한 결과물을 console로 담아온 것이다. *dir은 현재 경로에 있는 파일들 목록을 출력하는 명령어이다.

 

이것이 가능한 이유는 child_process때문이다.

child_process를 사용하면 node프로세서 말고 다른 프로세서(프로그램)를 하나 더 사용한다고 생각하면 된다.

exec하면 보통 다른 프로그램 즉, 터미널이 하나 더 사용된다고 생각하자. 코드에서는 새로운 터미널이 하나 더 생겨서 거기에 dir 명령어가 실행된 것이다. 그래서 node exec을 하면 콘솔창에 dir을 입력한 것과 동일한 결과가 나온다.

한글이 깨지긴 했지만 콘솔에 dir을 사용한것과 동일한 결과가 나온다.

 

이것을 이용하면 다른 언어를 노드에서 사용할 수 있다. 

//spawn.js
const spawn = require('child_process').spawn;

var 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')

spawn을 통해서 파이썬으로 실행한 결과를 담아 올 수 있다.

출력 결과는 당연히 hello phython이다. *당연히 파이썬이 설치가 되어 있어야 한다.