2013-06-01 2 views
4

저는 하나의 파이썬 스크립트와 다른 하나의 노드 스크립트라는 두 개의 스크립트가 있습니다. python 스크립트는 infinte 루프에서 실행되고 직렬 데이터를 읽습니다. 직렬 데이터를 받으면 node.js scipt로 전달하여 노드 서버에서 처리 할 수 ​​있도록해야합니다.파이썬 스크립트에서 노드 스크립트로 시리얼 데이터 보내기

node.js child_process 모듈을 사용하여 파이썬 스크립트에서 데이터를 읽는 것을 생각했지만 파이썬 스크립트는 무한 루프이므로 노드 스크립트에 데이터를 반환하지 않습니다. 누구든지이 문제를 해결하는 방법을 알려주십시오.

파이썬 스크립트를

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); 
}); 

참고 : 파이썬 스크립트로가는 대한 나의 유일한 이유는 Node.js를하여 SerialPort 모듈 인해 내 프로젝트에 대한 현재 작동하지 않는 것입니다 직렬 포트 모듈의 일부 문제

+0

직렬 데이터의 특성은 무엇입니까? 많이? 조금? 본문? 이진? –

답변

7

인쇄 후 파이썬 스크립트에서 표준 출력 스트림을 플러시해야합니다.

파이썬 :

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는 어쨌든 stdout을 사용하지 않고이 프로그램을 사용합니다. –

2

사용 -u 파이썬 명령 줄 여기에 시간을 출력 예입니다 (I 테스트하기 위해 일련의 장치가없는) 스위치. 파이썬이 버퍼링되지 않은 스트림을 사용하도록 지시합니다.

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); 
}); 
관련 문제