NodeJs产卵给ENOENT错误(Raspbian)

我有一个关于产卵nodeJs脚本的错误:

exec('node ./modules/buttons', function(error, stdout, stderr) { if(error) console.log(error); console.log(stdout); if(stderr) console.log(stderr); }); 

Exec工作得很好。 然而产卵

 var buttons = spawn('node ./modules/buttons.js', []); buttons.stdout.on('data', function(data){ console.log(data); }); 

给我以下错误:

 spawn node ./modules/buttons.js ENOENT 

定义脚本的绝对path导致相同的错误。 如果有人能帮我解决这个问题,我将不胜感激。 我完全不知道这可能是什么原因,谷歌也没有帮助我。

exec接受要执行的命令以及所有的命令行参数,但是产生,OTOH,接受调用的程序和命令行参数作为数组。

在你的情况下,Node.js试图执行一个名为node ./modules/buttons.js的程序,而不是以./modules/buttons.js作为命令行参数的node 。 这就是为什么它失败了。

引用spawn文档中的例子,

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

execspawn的区别在于, exec将在shell中默认启动命令, spawn只是调用程序。

注意:顺便说一句,因为你只是调用一个JavaScript文件,你最好使用execFile