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']);
exec
和spawn
的区别在于, exec
将在shell中默认启动命令, spawn
只是调用程序。
注意:顺便说一句,因为你只是调用一个JavaScript文件,你最好使用execFile