在 node.js 中运行 exec 时出现 error.code 139

Posted

技术标签:

【中文标题】在 node.js 中运行 exec 时出现 error.code 139【英文标题】:error.code 139 when running exec in node.js 【发布时间】:2015-01-14 13:49:35 【问题描述】:

我正在使用 node.js 来执行一个外部文件(编译的 cpp)。如果我自己执行文件,则程序可以正常工作。我应该得到以下输出:

得到响应 534,往返延迟:9569

我想使用 websocket 获取值并显示在网页上。不幸的是,从 node.js 运行程序时,我有以下输出:

标准输出:标准错误:执行错误:空 我不明白发生了什么,为什么如果我从命令行运行应用程序会得到所需的输出?

谢谢你,请原谅我的愚蠢问题!

更改执行文件的方式后,我得到以下输出:

标准输出:标准错误:执行错误: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);

      );
);

light.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;
     

【问题讨论】:

【参考方案1】:

我注意到,如果我在下面的行发表评论,脚本可以正常工作。我尝试使用的示例是:http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/

这让我检查了 RF24 库(我使用的库和示例中使用的库)的差异,似乎它们使用的是不同的库。我会尝试改变它,看看会发生什么。

radio.read( &got_time, sizeof(unsigned long) );

【讨论】:

以上是关于在 node.js 中运行 exec 时出现 error.code 139的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上运行 firebase node.js 时出现错误 R10(启动超时)

侦听大多数端口时出现 Node.js EACCES 错误

部署 Node.js 应用程序时出现 Heroku 错误

VS Code 运行 JavaScript 文件时出现“node...”乱码或错误

node.js 项目在本地机器上工作,在 Heroku 上部署时出现问题

在多模块 Maven 项目中运行 exec-maven-plugin 时出现问题