2012-10-04 5 views
0

나는 바보 같은 파이썬 문제가 있습니다. 내가 대체 그러나 경우,pyserial, if 및 file 읽기

import serial 
from time import sleep 

port = "/dev/tty.usbserial-A400fYTT" 
speed = 57600 
polarfile = 'polarfile.pg' 

f = open(polarfile, 'r') 

ser = serial.Serial(port, speed, timeout=0) 

while True: 
    data = ser.read(9999) 
    if len(data) > 0: 
     if(data == 'READY'): 
      f.readline() 
     else: 
      sleep(0.5) 

    sleep(1) 

ser.close() 

을하지만이 작동하지 않습니다 내가 직렬 연결에서 '준비'메시지가 파일마다에서 선을 읽으려고

그래서 나는이 쓴 제 (데이터는 인쇄 데이터에 의해 'READY'블록. 나는 준비 메시지가 ==합니다.

또한 내가 f.readline() 내 파일을 읽을 수 ... 평에 조언을 제공하는

감사합니다 초보자

- 편집 : 중요 정보, 직렬 "READY"메시지를받을 수 있지만 다른 무리가 있지만 "준비"메시지를받은 경우에만 반응하고 싶습니다.

+0

좋아, 문제를 발견 한 것 같습니다. 이것은 파이썬 코드에는 문제가 아니지만 직렬 회선에서 수신 된 메시지입니다. "READY"가 아니라 "READY \ n"또는 다른 새로운 줄 내용과 같이 더 복잡한 문자열입니다. 나는 어느 것을 발견했는지 알 수 없습니다. 죄송합니다. –

+1

스크립트가 줄 바꿈 문자 나 다른 메시지와 같이'READY''보다 더 많은 데이터를받는 경우에 대비하여': READY '데이터에':'를 사용할 수 있습니다. 또 다른 (전통적인) 방법은 한 번에 한 문자를 0이 아닌 시간 초과 값으로 읽고 "READY"메시지를 점진적으로 작성하고 일치하지 않을 때 다시 시작하는 것입니다. –

+0

'data = ser.read (9999)'를'data = ser.readline (9999)'로 바꿔 줘서 고마워. if (data == 'READY') :'if (data.startswith ('READY')) :'그리고 지금 작동 함 :) –

답변

1

I는 (9999)

입력 데이터의 두 번째로 대신 초 날 선에 의한 메시지 라인을 제공하고

대체

data = ser.readline(9999) 의해

데이터 = ser.read 대체

if (data.startswith('READY')):

0 의해

이제는 작동합니다.