2015-10-16 173 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