NodeJs产生ENOENT错误(Raspbian)

时间:2016-04-15 07:35:11

标签: node.js child-process

我遇到有关产生nodeJs脚本的错误:

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

Exec完美无缺。但是 spawn

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

给我以下错误:

spawn node ./modules/buttons.js ENOENT

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

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,Node.js尝试执行名为node ./modules/buttons.js的程序,而不是node作为命令行参数执行./modules/buttons.js。这就是它失败的原因。

引用spawn文档

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

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

注意: BTW,因为您只是调用JavaScript文件,最好使用execFile