素のJavaScriptからexeを実行する方法は以前やったが、やっぱりNode.jsから実行したい。
JavaScriptからexeを実行する
JavaScriptからexeを実行したい。実行時に引数を与えたり、exeの終了を待ったりしたい。Runメソッドobject.Run(strCommand, , ) 引数strCommand実行するコマンドラインを示す文字列値intWind...
今回は、Node.jsからexeを実行する方法を調査した。
非同期実行:child_process.exec()
コマンドを非同期で実行する。実行結果はcallbackで受け取る。
シェルを生成し、そのシェル内でコマンドを実行して、生成された出力をバッファリングします。 exec関数に渡されるコマンド文字列はシェルによって直接処理されるため、特殊文字(シェルによって異なります)はそれに応じて処理する必要があります。
https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
Child process | Node.js v23.3.0 Documentation
Sample
sample.exe
を実行する。
var exec = require('child_process').exec
var sample = function () {
exec('/sample.exe', function(err, stdout, stderr) {
if (stdout) console.log('stdout', stdout)
if (stderr) console.log('stderr', stderr)
if (err !== null) console.log('err', err)
})
}
sample()
同期実行:child_process.execSync()
コマンドを同期的に実行する。実行結果が戻り値になる。
child_process.execSync()メソッドは、子プロセスが完全に閉じられるまでメソッドが返されないことを除いて、一般にchild_process.exec()と同じです。タイムアウトが発生してkillSignalが送信されると、プロセスが完全に終了するまでメソッドは戻りません。子プロセスがSIGTERMシグナルをインターセプトして処理し、終了しない場合、親プロセスは子プロセスが終了するまで待機します。
https://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options
Child process | Node.js v23.3.0 Documentation
Sample
sample.exe
を実行する。
const execSync = require('child_process').execSync
const stdout = execSync('/sample.exe')
console.log(stdout)
まとめ
child_process.execSync()
を使っていたが、stderr
を受け取れないのが気に食わなくて調べていたら、
https://ja.stackoverflow.com/questions/28527/node-js-%E3%81%AE-execsync-%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%A7-stderr-%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E6%96%B9%E6%B3%95
stderr
が必要でしたら、例えばspawnSync
を使う方がよいと思います。
と、書いてある記事を見つけた。
Child process | Node.js v23.3.0 Documentation
stderr
以外に何が違うのか見れてないので、そのうち試してみる。