node.js - NodeJs 产生 ENOENT 错误(Raspbian)

标签 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 工作得很好。然而产卵

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

给我以下错误:

spawn node ./modules/buttons.js ENOENT

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

最佳答案

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 code> 只是调用该程序。

注意:顺便说一句,由于您只是调用 JavaScript 文件,因此最好使用 execFile

关于node.js - NodeJs 产生 ENOENT 错误(Raspbian),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36640982/

相关文章:

node.js - Typescript 存在带有保留字的命名空间

node.js - Apache Cordova 在 Yosemite 上安装失败

ubuntu - 为什么 Dart 的 "Process.start"不能在 Ubuntu 终端执行命令时执行 Ubuntu 命令?

c - 如何用 C 检测 Linux 上 exec'ed 子进程的文件事件?

javascript - 如何通过node js将变量传递给powershell

javascript - 如何获得剧作家的元素集合?

c - 如何从 PROC 获取有关子进程的信息

node.js - 使用 buildpacks 在 heroku 上执行和 PATH

node.js - 当 Node 进程被杀死时杀死所有child_process

node.js - 无法在 Ubuntu 13.04 上运行 lessc。连 "command not found"都没有