サーチ…


構文

  • child_process.exec(command [、options] [、callback])
  • child_process.execFile(file [、args] [、options] [、callback])
  • child_process.fork(modulePath [、args] [、options])
  • child_process.spawn(command [、args] [、options])
  • child_process.execFileSync(file [、args] [、options])
  • child_process.execSync(コマンド[、options])
  • child_process.spawnSync(command [、args] [、options])

備考

子プロセスを扱う場合、すべての非同期メソッドはChildProcessインスタンスを返しますが、すべての同期バージョンは実行されたものの出力を返します。 Node.js内の他の同期操作と同様に、エラーが発生すると、それスローされます。

新しいプロセスを生成してコマンドを実行する

バッファ child_process.spawn()されていない出力を必要とする新しいプロセスを生成するには(例えば、印刷するのではなく一定時間に渡って出力を出力し、すぐに終了するような長時間実行するプロセス)、 child_process.spawn()使用します。

このメソッドは、指定されたコマンドと引数の配列を使用して新しいプロセスを生成します。戻り値は、 ChildProcessインスタンスで、 stdoutおよびstderrプロパティを提供します。これらのストリームの両方がstream.Readableインスタンスです。

次のコードは、コマンドls -lh /usr実行と同じです。

const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

別のコマンド例:

zip -0vr "archive" ./image.png

次のように書くことができます:

spawn('zip', ['-0vr', '"archive"', './image.png']);

シェルを起動してコマンドを実行する

バッファされた出力が必要な(つまり、ストリームではない)シェルでコマンドを実行するには、 child_process.exec使用しchild_process.exec 。たとえば、 cat *.js file | wc -lを実行する場合は、オプションなしのcat *.js file | wc -lは次のようになります。

const exec = require('child_process').exec;
exec('cat *.js file | wc -l', (err, stdout, stderr) => {
  if (err) {
    console.error(`exec error: ${err}`);
    return;
  }

  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});

この関数は最大3つのパラメータを受け取ります。

child_process.exec(command[, options][, callback]);

コマンドパラメータは文字列であり、必須ですが、オプションオブジェクトとコールバックは両方ともオプションです。オプションオブジェクトが指定されていない場合、 execはデフォルトとして以下を使用します。

{
  encoding: 'utf8',
  timeout: 0,
  maxBuffer: 200*1024,
  killSignal: 'SIGTERM',
  cwd: null,
  env: null
}

オプションオブジェクトはshellパラメータもサポートしています。これは、デフォルトではUNIXでは/bin/sh 、Windowsではcmd.exe 、プロセスのユーザIDを設定するためのuidオプション、グループIDのgidオプションです。

コマンドが実行されたときに呼び出されるコールバックは、3つの引数(err, stdout, stderr)呼び出されます。コマンドが正常に実行された場合、 errnullになりnull 。そうでない場合はErrorインスタンスになりますerr.codeはプロセスの終了コードで、 err.signalは終了するために送信されたシグナルです。

stdoutおよびstderr引数は、コマンドの出力です。オプションオブジェクト(デフォルト: string )で指定されたエンコーディングでデコードされますが、それ以外の場合はBufferオブジェクトとして返されます。

また、 execSyncという同期バージョンのexecも存在します。同期バージョンはコールバックをとらず、 ChildProcessインスタンスの代わりにstdoutを返します。同期バージョンでエラーが発生する 、プログラムスローされて停止します。これは次のようになります。

const execSync = require('child_process').execSync;
const stdout = execSync('cat *.js file | wc -l');
console.log(`stdout: ${stdout}`);

実行可能ファイルを実行するプロセスの生成

実行可能ファイルなどのファイルを実行する場合は、 child_process.execFile使用しchild_process.execFilechild_process.execようなシェルを生成するのではなく、直接新しいプロセスを作成します。これはコマンドを実行するよりもやや効率的です。関数は以下のように使うことができます:

const execFile = require('child_process').execFile;
const child = execFile('node', ['--version'], (err, stdout, stderr) => {
  if (err) {
    throw err;
  }

  console.log(stdout);
});

child_process.execとは異なり、この関数は最大4つのパラメータを受け入れます.2番目のパラメータは、実行可能ファイルに指定する引数の配列です。

child_process.execFile(file[, args][, options][, callback]);

そうでなければ、オプションとコールバック形式はchild_process.execと同じです。関数の同期バージョンの場合も同じです:

const execFileSync = require('child_process').execFileSync;
const stdout = execFileSync('node', ['--version']);
console.log(stdout);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow