2016-04-15 4 views
1

i in Bezug auf einen Fehler habe Laich NodeJS Skript:NodeJS Spawn gibt ENOENT Fehler (Raspbian)

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

Exec völlig in Ordnung. jedoch Laich

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

gibt mir die folgende Fehlermeldung:

spawn node ./modules/buttons.js ENOENT 

den absoluten Pfad zu den Script-Ergebnisse in den gleichen Fehler definieren. Würde es schätzen, wenn jemand mir helfen könnte, dies zu lösen; Ich habe absolut keine Ahnung, was die Ursache dafür sein könnte und google hilft mir auch nicht.

Antwort

1

exec akzeptiert den Befehl, der mit allen Befehlszeilenparametern ausgeführt wird, aber spawn, OTOH, akzeptiert das Programm zum Aufrufen und die Befehlszeilenargumente als Array.

In Ihrem Fall versucht Node.js, ein Programm namens node ./modules/buttons.js, nicht node mit ./modules/buttons.js als Befehlszeilenargument auszuführen. Deshalb versagt es.

das Beispiel aus dem spawn docs Zitiert,

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

Der Unterschied zwischen exec und spawn ist, dass, exec Standardstart der Befehl in einer Schale sein wird, ruft spawn einfach das Programm.

Hinweis: BTW, wie Sie einfach nur eine JavaScript-Datei aufgerufen wird, sind Sie besser dran execFile

+0

exec und execfile nicht tun, was ich will. Ich möchte das stdout vom buttons.js-Skript erfassen, das eine wahrheitsgetreue Schleife ausführt. Spawn sollte mir dabei helfen können, wegen des Nachrichtenhörers. Danke für deine Antwort. Ich schätze, ich habe die Dokumente nicht so gut gelesen;) –

+0

Haben Sie versucht, nach dem von mir zitierten Beispiel zu verfahren? – thefourtheye

+0

Ja, es hat funktioniert; Vielen Dank. Allerdings stoße ich jetzt auf das Problem, dass es nur für kurze Zeit die Standardausgabe des erstellten Skripts erfasst. Nach einer Weile hört es einfach auf (das Skript läuft weiter). Es scheint auch durch die Eingabe von anderen erzeugten Childs aufgehoben zu werden. Seltsames Problem; Ich bin mir nicht sicher, was es verursacht, aber ich habe angefangen zu arbeiten. Danke –