Node.js スクリプトから外部コマンドを実行する

Node.js スクリプトから外部コマンドを実行してみる。child_process を使えば簡単にできる。

目次

単純にコマンドを実行し、その結果を表示するだけ

まずは、nkf という文字コード解析コマンドを実行してみる。

const childProcess = require('child_process');
childProcess.exec('nkf --guess ./TEST.txt', (error, stdout, stderr) => {
  if(error) {
    // エラー時は標準エラー出力を表示して終了
    console.log(stderr);
    return;
  }
  else {
    // 成功時は標準出力を表示して終了
    console.log(stdout);
  }
});

コマンドの標準入力に値を流し込む

コマンドの標準入力に値を流し込む例。今回は cat コマンドを使って標準入力を標準出力を表示させてみる。

catコマンドは引数がないときに標準入力を標準出力にそのまま出力する。

普通にコマンドとして書くなら、

$ echo 'HOGE FUGA' | cat

という風に書いた時の状態を再現する。

const childProcess = require('child_process');

const exec = childProcess.exec('cat', (error, stdout, stderr) => {
  if(error) {
    // エラー時は標準エラー出力を表示して終了
    console.log(stderr);
    return;
  }
  else {
    // 成功時は標準出力を表示して終了
    console.log(stdout);
  }
});
// ↑ココまで同じ

// 標準入力に値を渡し、標準入力を閉じる (閉じないと終わりを待ち続けてしまう)
exec.stdin.write('HOGE FUGA');
exec.stdin.end();

childProcess.exec() の戻り値は ChildProcess。その stdin (標準入力) に値を write() して、最後に end() で閉じてやれば良い。

案外簡単に出来たのでよかった。