2013-06-01 99 views
4

我有兩個腳本 - 一個是python腳本,另一個是節點腳本。 python腳本在無限循環中運行並讀取串行數據。一旦它接收到串行數據,它就必須將它傳遞給node.js scipt,以便它可以在節點服務器中進行處理。從python腳本發送串行數據到節點腳本

我想過使用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腳本去的唯一原因是的node.js的SerialPort模塊不爲我的項目截止目前工作在串口模塊中遇到一些問題。

+0

串行數據的性質是什麼?很多?一點?文本?二進制? –

回答

7

打印完成後,需要在python腳本中刷新標準輸出流。下面是打印時間的一個例子(我沒有一個串行設備進行測試):

的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); 
}); 
+0

謝謝隊友。有效。 –

+0

@nfreeze有沒有使用這個程序,而不使用標準輸出 –

2

使用-u蟒蛇命令行開關。它會告訴python使用無緩衝的流。

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

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

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