2015-10-08 65 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(),但仍然有一些數據丟失。 –