6

1 つは Python スクリプト、もう 1 つはノード スクリプトです。Python スクリプトは無限ループで実行され、シリアル データを読み取ります。シリアル データを受信したら、それを node.js scipt に渡して、ノード サーバーで処理できるようにする必要があります。

node.js child_process モジュールを使用して python スクリプトからデータを読み取ることを考えましたが、python スクリプトは無限ループであるため、ノード スクリプトにデータが返されません。誰でもこの問題を解決する方法を教えてもらえますか?

Python スクリプト:

import serial
ser = serial.Serial('COM10', 9600, timeout =1)
while 1 :
    print ser.readline()'

Node.js スクリプト:

var spawn = require('child_process').spawn,
ls    = spawn('python',['pyserial.py']);

ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});

注:pythonスクリプトを使用する唯一の理由は、serialportモジュールの問題により、node.js serialportモジュールが現在私のプロジェクトで機能していないことです。

4

2 に答える 2

9

印刷後、Python スクリプトで標準出力ストリームをフラッシュする必要があります。時刻を出力する例を次に示します (テストするシリアル デバイスがありません)。

パイソン:

import sys
from datetime import datetime
from time import sleep
while 1:
    print datetime.now()
    sys.stdout.flush()
    sleep(5)

Node.js:

var spawn = require('child_process').spawn,
    ls    = spawn('python',['test.py']);

ls.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});
于 2013-06-01T13:47:29.613 に答える