2017-03-28 9 views
0

Ich versuche, PIFM auf meinem Raspberry Pi durch Tweets von einem bestimmten Twitter-Konto mit node.js auszulösen. Allerdings, wenn ich laufen twitpifm.js auf der Kommandozeile:Fehler: spawn sh ENOENT Node.js

node twitpifm.js 

Ich erhalte die folgende Fehlermeldung:

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: spawn sh ENOENT 
    at exports._errnoException (util.js:874:11) 
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32) 
    at onErrorNT (internal/child_process.js:344:16) 
    at doNTCallback2 (node.js:439:9) 
    at process._tickCallback (node.js:353:17) 
    at Function.Module.runMain (module.js:469:11) 
    at startup (node.js:134:18) 
    at node.js:961:3 

Ich benutze diese Version von PIFM auf meinem PI2

https://github.com/asmello/fm_transmitter

Ich habe ein Skript (test.sh) geschrieben, das PIFm von der Befehlszeile ohne Parameter

startet
#!/bin/bash 
    /home/pi/PIFm/fm_transmitter/bin/Release/fm_transmitter music.wav 103.50 

Ich bin mir bewusst, dass ich einen child_process innerhalb meiner node.js verwenden muss, um dieses Shell-Skript zu aktivieren, habe aber Probleme damit;

Zuerst rufe ich Kind-Prozess mit:

var spawn = require('child_process').spawn // child process.spawn 

ich dann versuchen, die Schale mit dem folgenden auszulösen:

function thisTweet(){ 

    spawn('sh', ['test.sh'], { // shell script I want to run. 
    cwd:' /home/pi/Desktop/Twitter', // current working directory where my twitpifm.js file is 
    env: Object.assign({}, process.env, { PATH: process.env.PATH + '/home/pi/PIFm/fm_transmitter' }) //this sets a path to where test.sh is 
    }) 

Irgendwelche Vorschläge wäre toll!

Antwort

0

Ok .. Ich habe eine Lösung, die mit zu arbeiten scheint. execfile von hier:

https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback

Dieser Code funktioniert:

const execFile = require('child_process').execFile; 
const child = execFile('sh', ['/home/pi/Desktop/twitter/test'], (error, stdout, stderr) => { 
    if (error) { 
    throw error; 
    } 
    console.log(stdout); 
}); 
} 

Dies lässt mich ein Shell-Skript aus node.js ausführen

Verwandte Themen