2015-10-08 62 views
0

我正在通过串口连续读取cat/proc/kmsg。当串行缓冲区中的字节数为零时,我打断了循环。无法从python中的串口读取完整的数据

但我无法从缓冲区读取完整的数据。有些数据丢失。我可以如何读取完整的数据而不会有任何损失?

import serial 
    ser1=serial.Serial('COM67') 
    ser.baudrate=115200 
    resp=[] 
    ser1.write("cat /proc/kmsg\n") 
    cnt=0 
    time.sleep(1) 
    while True: 
     bytesToRead = ser1.inWaiting() 
     c=ser1.read(bytesToRead) 
     ser1.flushInput() 
     import re 
     c=re.sub(r'\x08','',c) 
     resp.append(c)    
     if(bytesToRead==0): 
      cnt=cnt+1 
      if(cnt>5): 
       print "-"*57 
       ser1.write("\x03")  #'\x03' ==CTRL+C 
       break 
    ser1.flushInput() 
    print "_kmsg data :",resp 

回答

0

我认为这个问题是在这三条线:

bytesToRead = ser1.inWaiting() 
c=ser1.read(bytesToRead) 
ser1.flushInput() 

后Python已经读多少字节有在输入缓冲区中,更多的Python之前实际上可以写入到达flushInput() 。在这段时间内到达的所有字节都不会被读取,但只会被丢弃。

+0

@ peterson.i尝试通过评论flushInput(),但仍然有一些数据丢失。 –