2016-08-02 7 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を使用することもできますが、Async ...となるため、最良の方法は、コールバックが他のケースで受信された後に読み込みメソッドを実行することです私はすべてのデータが正しく書き込まれるかどうかはわかりません。 –

+0

私が知っている限り、あなたはPythonを知っていると思う... JavaScriptはsyncの場合にその言語に似ているが、JSではコールバックがあるので、次に何が起きても気にしない...私はちょうどそれを実行して行く次の行とコールバックが応答を処理します。あなたの場合。データはファイルに書き込まれませんが、最後のコンソールはすでに処理されています。そのため、この種の操作を処理するためにコールバックが必要です。また、NodeJsのPythonからコードを書き換えて、データを同期形式でファイルに書き込むこともできます。 –

関連する問題