2016-04-15 10 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は完全に正常に動作します。

spawn node ./modules/buttons.js ENOENT 

同じエラーでスクリプト結果の絶対パスを定義する:しかし産卵

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

は私に次のエラーを与えます。もし誰かがこれを解決するのを助けることができれば感謝します。私はこれの原因となる可能性のあることを全く知りませんし、Googleも私を助けてくれていません。

答えて

1

execは、すべてのコマンドラインパラメータとともに実行するコマンドを受け入れますが、起動するプログラムを受け入れ、呼び出すプログラムとコマンドライン引数を配列として受け入れます。

あなたの場合、Node.jsは、./modules/buttons.jsをコマンドライン引数としてnodeではなく、node ./modules/buttons.jsというプログラムを実行しようとしています。それが失敗する理由です。 spawnドキュメントの例を引用

execspawn

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

差がexecがデフォルトspawnは、単にプログラムを起動し、シェルでコマンドを起動するであろう、ということです。

注:あなたは、単にJavaScriptファイルを呼び出しているようはところで、あなたはexecFile

+0

のexecを使用してオフに優れているとexecfileを、私はやりたいことはありません。私はbutton.jsスクリプトからstdoutをキャプチャしたい、真のループを実行します。スポーンはメッセージリスナのためにそれを手伝ってくれます。あなたの答えをありがとう。あなたがあまりにもうまくドキュメントを読んでいないと思う;) –

+0

私は引用した例に従ってやろうとしましたか? – thefourtheye

+0

はい、動作しました。ありがとう。しかし、今では、短時間だけ生成されたスクリプトの標準出力をキャプチャするという問題に取り組んでいます。しばらくしてから停止します(スクリプトは実行され続けます)。また、他の生成された子プロセスの入力によってキャンセルされるようです。奇妙な問題。それが原因なのかどうかわからないけど、私は働き始めている。ありがとう –

関連する問題