2016-04-15 99 views
1

我遇到关于产卵脚本的NodeJS一个错误:产卵的NodeJS给ENOENT错误(Raspbian)

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 

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

回答

1

exec接受命令与所有的命令行参数一起执行,但产卵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将默认启动在一个壳中的命令,spawn只是调用该程序。

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

+0

exec和的execfile不会做我想做的。我想从运行while循环的buttons.js脚本捕获stdout。由于消息监听器,Spawn应该能够帮助我。尽管谢谢你的回答。猜测我没有看太多文档;) –

+0

您是否按照我引用的示例尝试去做? – thefourtheye

+0

是的,它的工作;谢谢。然而,现在我遇到了一个问题,即它只在短时间内捕获生成的脚本的标准输出。过了一段时间它就停止了(脚本一直在运行)它似乎也被其他产生的孩子的输入取消了。奇怪的问题;不知道是什么原因造成的,但我产卵了。谢谢 –