2016-08-02 17 views
0

這裏是我的Python代碼:調用從Node.js的python腳本後,它並沒有跟隨執行的順序

import smbus 
import sys 
import time 
x=0 
completeData = ""; 
while x<800: 
    crgb = ""+x; 
    print crgb 
    completeData = completeData + crgb + "@"; 
    time.sleep(.0001) 
    x = x+1 
    file = open("sensorData.txt", "w") 
    file.write(completeData) 
    file.close() 
    sys.stdout.flush() 
else: 
print "Device not found\n" 

,這是我的Node.js代碼:

var PythonShell = require('python-shell'); 

PythonShell.run('sensor.py', function (err) { 
    if (err) throw err; 
    console.log('finished'); 
}); 
console.log ("Now reading data"); 

: ::

The output is : 
Now reading data 
finished 

我的目標是使用python編寫數據,然後使用node.js讀取這些數據。但問題是程序首先執行讀取功能,然後寫入。

我該如何首先使用python完成寫入然後使用node.js讀取?

任何幫助將不勝感激!在此先感謝

回答

0

將您的閱讀代碼放入回調。 JavaScript是同步的,你的代碼不是。

var PythonShell = require('python-shell'); 

PythonShell.run('sensor.py', function (err) { 
    if (err) throw err; 
    console.log('finished'); 
    console.log ("Now read data"); 
}); 

希望這會有所幫助。

+0

謝謝你的迴應。我知道它的工作方式。但是我必須讀取'PythonShell.run(){}'函數之外的數據。因爲這是一個大項目的一部分,下面的計算取決於這些數據。是否有任何其他方式可以在「PythonShell.run(){}」函數之外順序執行代碼。 – Ramzan

+0

您可以使用nodejs exec或spawn https://nodejs.org/api/child_process.html ...但它們也將是異步...因此,最好的方法是在其他情況下收到回調後運行讀取方法我不確定所有數據都能正確寫入。 –

+0

就我看你知道python ...在同步行爲的情況下,類似於該語言的JavaScript,但在JS中,我們有回調,這意味着我不關心接下來發生了什麼...我只是運行它,並去下一行和回調將處理響應。在你的情況。數據不會寫入文件,但上一個控制檯已經處理完畢。這就是爲什麼你需要一個回調來處理這種操作。或者你可以用NodeJs中的python重寫代碼,以同步的方式將數據寫入文件。 –