web-dev-qa-db-ja.com

node.js(childProcess)でシェルスクリプトを実行する

Node.jsサーバーでシェルスクリプトを実行したいのですが、何も起こりませんでした...

childProcess.exec('~/./play.sh /media/external/' + req.params.movie, function() {}); //not working

別のchildProcessは完全に機能しますが、上記のプロセスは機能しません。

childProcess.exec('ls /media/external/', movieCallback); //works

ターミナルでスクリプトを実行すると、動作します。何か案は? (chmod + xが設定されています)

34
Ralf

Exec関数コールバックには、エラー、stdout、およびstderr引数が渡されます。それらをコンソールに吐き出すことで問題の診断に役立つかどうかを確認します。

exec('~/./play.sh /media/external/' + req.params.movie,
  function (error, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
});
58
smokey.edgy
exec('sh ~/play.sh /media/external/' + req.params.movie ,function(err,stdout,stderr){
      console.log(err,stdout,stderr);
 })

play.shシェルスクリプトと/media/external/ + req.params.movi​​eを引数として。出力は、コールバックのstdout、stderr変数を介して利用できます。

またはこれを試してください

var myscript = exec('sh ~/play.sh /media/external/' + req.params.movie);
myscript.stdout.on('data',function(data){
    console.log(data); // process output will be displayed here
});
myscript.stderr.on('data',function(data){
    console.log(data); // process error output will be displayed here
});`
5
n_rao