카테고리 없음

child_process

· 코딩마이데이

노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈입니다. 이 모듈을 통해 다른 언어의 코드를 실행하고 결괏값을 받을 수 있습니다. 이름이 child_process(자식 프로세스)인 이유는 현재 노드 프로세스 외에 새로운 프로세스를 띄워서 명령을 수행하고, 노드 프로세스에 결과를 알려주기 때문입니다.

exec.js

const exec = require("child_process").exec;

const process = exec("dic");

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

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

 

exec의 첫 번째 인수로 명령어를 넣습니다. 리눅스와 맥이라면 exec('ls')를 대신 입력하면 됩니다. 실행하면 현재 폴더의 파일 목록들이 표시될 것입니다.

결과는 stdout(표준출력)과 stderr(표준에러)에 붙여둔 data 이벤트 리스너에 버퍼 형태로 전달됩니다. 성공적인 결과는 표준 출력에서, 실패한 결과는 표준에러에서 표시됩니다.

 

콘솔

$ node exec
(현재 폴더의 파일 목록 표시)

 

이번에는 파이썬 프로그램을 실행해보겠습니다.

 

test.py

print('hello python')

 

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());
}); // 실행 에러

 

파이썬 코드를 실행하는 명령어인 python text.py를 노드의 spawn을 통해 실행합니다. spawn의 첫 번째 인수로 명령어를, 두 번째 인스로 옵션 배열을 넣으면 됩니다. 결과는 exec과 마찬가지로 stdout, stderr의 데이터로 나옵니다.

 

콘솔

$ node spawn
Python

 

exec은 셸을 실행해서 명령어를 수행하고 spawn은 새로운 프로세스를 띄우면서 명령어를 실행합니다. spawn은 새로운 프로세스를 띄우면서 명령어를 실행합니다. spawn에서도 세 번째 인수로 {shell : true}를 제공하면 exec처럼 실행해서 명령어를 수행합니다. 셸을 실행하는지 마는지에 따라 수행할 수 있는 명령어에 차이가 있습니다.