2014-11-17 2 views
2

Я использую node.js для выполнения внешнего файла (скомпилированного cpp). Если я сам исполняю файл, программа работает нормально. Я должен получить следующий вывод:error.code 139 при запуске exec в node.js

Got response 534, round-trip delay: 9569

Я хотел бы использовать websokets, чтобы принять значение и отображение на веб-странице. К сожалению, при запуске программы из node.js У меня есть следующий вывод:

stdout: stderr: exec error: null I don't understand what is happening and why if I run the application from command line I get the desired output?

Спасибо и, пожалуйста, простите меня за глупый вопрос!

После изменения, как я выполнить файл я получаю следующий результат:

stdout: stderr: exec error: 139

изменения, которые я сделал являются:

exec('sudo /home/pi/gitwork/RF24/RPi/RF24/examples/light -m 1', 
         function (error, stdout, stderr) { 
            socket.emit("response"); 
            console.log('stdout: ' + stdout); 
            console.log('stderr: ' + stderr); 
          if (error !== null) { 
            console.log('exec error: ' + error.code); 
          } 

server.js

function sendMessage(socket){ 
     console.log("execute app"); 
     exec.execFile('/home/pi/gitwork/RF24/RPi/RF24/examples/light', 
         ['-m', 1], 
         function (error, stdout, stderr) { 
           socket.emit("response"); 
           console.log('stdout: ' + stdout); 
           console.log('stderr: ' + stderr); 
         if (error !== null) { 
           console.log('exec error: ' + error.code); 
         } 

       }); 
} 

io.sockets.on('connection', function (socket) { 
     socket.on('get', function (data) { 
       console.log("get received"); 
       sendMessage(socket); 

     }); 
}); 

свет .cpp

bool switchLight(int action){ 
     radio.startListening(); 
     bool timeout = false; 
     while (! radio.available()) { 
       sleep(10); 
     } 

     if (radio.available()){ 
       unsigned long got_time=0; 
       radio.read(&got_time, sizeof(unsigned long)); 
       printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); 
       return true; 
     }else{ 
       printf("Failed, response timed out.\n\r"); 
       return false; 
       } 
} 

int main(int argc, char ** argv){ 

     char choice; 
     setup(); 
     bool switched = false; 
     int counter = 0; 

     while((choice = getopt(argc, argv, "m:")) != -1){ 

       if (choice == 'm'){ 

        printf("\nOpening the gates...\n"); 
        while(switched == false && counter < 5){ 
//      switched = true; 
         switched = switchLight(atoi(optarg)); 
         counter ++; 
        } 

       }else{ 
        // A little help: 
         return 4; 
         printf("\n\rIt's time to make some choices...\n"); 
       } 

      //return 0 if everything went good, 2 otherwise 
      if (counter < 5) 
//    printf("ok ok ok"); 
       return 0; 
      else 
       return 2; 
    } 
} 

ответ

0

Я заметил, что если я прокомментирую ниже строку, скрипт работает нормально. Пример, который я пытаюсь использовать, следующий: http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/

Это заставило меня проверить различия в библиотеках RF24 (тот, который я использую, и тот, который используется в примере), и кажется, что они используют другую библиотеку , Я попытаюсь изменить его и посмотреть, что это произойдет.

radio.read(&got_time, sizeof(unsigned long)); 
Смежные вопросы