Node.js:外部プログラム呼び出し
Node.js:外部プログラム呼び出し
Sync が付かないもの(spawnなど) が非同期版、Sync が付いているもの(spawnSyncなど) が同期版
その他の呼び出し (exec, execSync, execFile, execFileSync, fork) は spawn, spawnSync の特別なケース
spawn, exec, execFile はプロセスの終了を待たず、非同期に通信することができる。ChildProcess オブジェクトを返す。
ChildProcess オブジェクトには、イベント関数とメソッドが定義されていて、ここでリアルタイムで入出力・操作することができる。
Event: 'message' と書いてあるのが ChildProcess オブジェクトのイベント関数。
subprocess.* と書いてあるのが ChildProcess オブジェクトのメソッドとプロパティ。これで子プロセスを制御できる。(名前が分かりにくい…)
spawnSync, execSync, execFileSync はプロセスの終了を待って、結果を受け取って処理を続ける。
spawnSync はプロセス終了までの標準出力、標準エラー出力、終了コードなどの全情報をオブジェクトで返す。
execSync, execFileSync はプロセス終了までの標準出力を返す。
execFile, execFileSync は実行ファイルを直接実行し、シェルを介さない。
exec, execSync は args を取らず、シェルのコマンドライン解釈をする。
fork は Node.js のモジュールを実行する。(fork(2) APIと異なり、クローンされた子プロセスができるわけではない。)
非同期(イベントドリブン)で、プロセスの終了を待つ場合
code:exec.js
const exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr){
// result
});
非同期で、プロセスの動作中に標準入出力を通して通信する場合
code:spawn.js
const spawn = require('child_process').spawn;