자바스크립트/모듈 & 내장함수

Spawn을 활용한 배치 스크립트 (자동 실행)

길용쓰 2023. 11. 7. 04:54

 

spawn을 통해 새로운 프로세스를 시작 할 수 있으며,

해당 프로세스의 입출력 조작 또한 가능하다.

 

import { spawn } from 'child_process';
//const { spawn } = require('child_process');

const command = 'node';
const args = ['index.js'];
const childProcess = spawn(command, args, {
  stdio: 'pipe',
  shell: true,
});​

node index.js란 터미널 명령어를 실행한 프로세스 생성

 

const input1 = '14000\n';  // 수정된 입력값
const input2 = '1,2,3,4,5,6\n';  // 수정된 입력값
const input3 = '7\n';  // 수정된 입력값

childProcess.stdin.write(input1);
setTimeout(() => {
    childProcess.stdin.write(input2);
    setTimeout(() => {
      childProcess.stdin.write(input3);
      childProcess.stdin.end();
    }, 500);
  }, 500);

 

readLine과 같은 함수로 사용자 입력을 받는다면

stdin.write로 input값을 넣어준다.

입력이 여러번이라면 setTimeout()으로 시간 간격을 준다.

 

 

childProcess.stdout.on('data', (data) => {
  console.log(data.toString());
});

childProcess.stderr.on('data', (data) => {
    console.error(data.toString()); // 출력된 에러 메시지를 콘솔에 표시
  });

childProcess.on('error', (err) => {
  console.error('오류 발생:', err);
});

childProcess.on('close', (code) => {
  console.log('프로세스 종료. 종료 코드:',code);
});

프로세스의 출력이나 에러, 종료를 감지한다.

또한 콘솔에 출력되는 에러메세지는 stderr로 감지한다.

 

 

 

 

 

전체 코드

import { spawn } from 'child_process';

const command = 'node';
const args = ['index.js'];
const input1 = '14000\n';  // 수정된 입력값
const input2 = '1,2,3,4,5,6\n';  // 수정된 입력값
const input3 = '7\n';  // 수정된 입력값
const childProcess = spawn(command, args, {
  stdio: 'pipe',
  shell: true,
});

childProcess.stdin.write(input1);
setTimeout(() => {
    childProcess.stdin.write(input2);
    setTimeout(() => {
      childProcess.stdin.write(input3);
      childProcess.stdin.end();
    }, 500);
  }, 500);

childProcess.stdout.on('data', (data) => {
  console.log(data.toString());
});

childProcess.stderr.on('data', (data) => {
    console.error(data.toString()); // 출력된 에러 메시지를 콘솔에 표시
  });

childProcess.on('error', (err) => {
  console.error('오류 발생:', err);
});

childProcess.on('close', (code) => {
  console.log('프로세스 종료. 종료 코드:',code);
});