2012-10-04 28 views
0

我有一個愚蠢的python問題。pyserial,如果和文件讀取

我想從文件中讀取,每次我從串行連接得到一個「就緒」消息的行,所以我寫了這個:

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() 

但它不工作,但是如果我更換中頻(數據==「就緒」塊的打印數據,我得到的就緒消息。

而且我可以閱讀我的f.readline()文件...

由於到PY給意見新手

- 編輯: 重要信息,系列不接收只有「準備」消息,但一堆其他,但我想只是在收到「準備」消息時作出反應。

+0

好吧我似乎發現了問題。 這不是python代碼的問題,而是串口線上收到的消息。 這不僅僅是「準備好」,而是一個更復雜的字符串,如「READY \ n」或其他新的行內容。 我不知道哪一個,但我會發現。 對不起,噪音! –

+1

爲了防止腳本收到比'READY'更多的數據,比如新行字符或其他消息,可以在數據中使用'if'READY':'。另一種(傳統的)方法是每次讀取一個字符並使用非零超時值,逐步構建「READY」消息,並在不匹配時重新開始。 –

+0

感謝這幾乎是我所做的:用'data = ser.readline(9999)'替換'data = ser.read(9999)',它通過輸入數據的第二行給出消息,而不是第二個消息,然後替換' if(data =='READY'):'by'if(data.startswith('READY')):'現在它工作:) –

回答

1

我剛更換

數據= ser.read(9999)

通過

data = ser.readline(9999)這使我由線消息行,而不是由第二輸入數據的第二和隨後更換

if(data == 'READY'):通過

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

,現在工程:)