2016-04-15 129 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

是的,它的工作;謝謝。然而,現在我遇到了一個問題,即它只在短時間內捕獲生成的腳本的標準輸出。過了一段時間它就停止了(腳本一直在運行)它似乎也被其他產生的孩子的輸入取消了。奇怪的問題;不知道是什麼原因造成的,但我產卵了。謝謝 –