2015-10-16 144 views
0

调用实时多Python脚本嗯,这是一个比较复杂的问题,我试图解释它足够广泛,这样就可以了解我们需要什么。解决方案从服务器的NodeJS

该项目是关于一些步进电机,由raspi,运行在服务器的NodeJS,供应webapp的控制。 Webapp通过websocket与nodejs服务器进行通信。

可以控制与所述web应用操纵杆,每次值的变化的方向和速度,所述web应用程序发射具有的WebSocket prototcol到服务器的消息。

当的NodeJS服务器获取这些消息,它启动一个子进程,像这样:

 child_process.exec('python /home/pi/Adafruit-Motor-HAT-Python-Library/examples/StartStepper.py 10 1 10 0', function (err, stdout, stderr) { 
     if (err) { 
      console.log("child processes failed with error code: " + 
       err.code); 
     } 
     console.log(stdout); 
    }); 

我设置为步进剧本的话,我可以设置的步骤,转速和stepstyles作为参数脚本。

所以这一切工作正常,我可以用我的活动等启动脚本。

但是,如果我移动操纵杆,脚本会被多次调用,这很好,因为如果我从左向右切换或者如果我改变速度,但脚本就像一个堆叠,不要停止,当一个新的开始时,他们只是做他们的工作,并运行,直到他们完成。我希望他们在脚本再次被调用后立即停下来,但我并没有深入python。也许它甚至会工作,改变线程的属性,它控制运行时的步进器?对此我不确定。我只是想控制我的实时,这令人痛心的要与蟒蛇做踏步,因为步进控制,对其他语言的支持。

更新: 所以我现在尝试杀死进程之前,我执行一个新问题:

var child_process = require('child_process'); 

child_process.kill(); //Default killSignal 
    child_process.exec('python /home/pi/Adafruit-Motor-HAT-Python-Library/examples/StartStepperL.py 10 1 10 0', function (err, stdout, stderr) { 
     if (err) { 
      console.log("child processes failed with error code: " + 
       err.code); 
     } 
     console.log(stdout); 
    }); 

这显然是行不通的,因为我不处理killSignal,但我不得到处理它的地方,我已经阅读了关于它的文档。

回答

1

你为什么不只是不停的子进程的引用在任何时候,并产生一个新的之一,如果旧的存在杀死它之前。这样你就可以通过node.js应用程序处理所有这些。

退房子进程kill: https://nodejs.org/api/child_process.html#child_process_child_kill_signal

+0

谢谢,我会检查出来,硬件通信是完全新的给我,这么大的明显的事情是不是很明显,我:)谢谢提示。 – TobiasW

+0

我更新了我的问题,因为我需要一些帮助来杀死这个过程,我希望你能帮助我。 – TobiasW