2012-10-03 72 views
1

我使用Python 2.7.2與pyserial 2.6。 使用pyserial.readline()與eol中具有非「\ n」字符的設備交談時,最佳方法是什麼? pyserial doc指出pyserial.readline()在Python 2.6+中不再需要'eol ='參數,但推薦使用io.TextIOWrapper,如下所示: ser = serial.serial_for_url('loop://',timeout = 1 ) SIO = io.TextIOWrapper(io.BufferedRWPair(SER,SER))pyserial.readline()與python 2.7

然而蟒蛇io.BufferedRWPair doc特別警告反對這一做法,稱「BufferedRWPair不會嘗試同步訪問其基礎原料流。你不應該傳遞它與讀者和作者相同的對象;而是使用BufferedRandom。「

難道有人指向pyserial.readline()的一個工作示例使用eol而不是'eol'嗎?

感謝, 湯姆

+0

您可以使用'read()'並自行分割線條。 – TJD

回答

0

閱讀()有一個用戶可設置的最大尺寸,以讀取(位)的數據,如果數據串是可預測的長度,你可以簡單地設置以捕捉定點長度字符串。它在執行時有點像'肯塔基風向',但只要你的數據字符串的大小一致,它就不會變成bork。

除此之外,您真正的選擇是捕獲數據流並將其寫入另一個文件並手動/以編程方式拆分您的條目。

例如,您可以將數據流寫入.csv文件,並將分隔符變量調整爲您的EoL字符。

0

假設s是一個開放的serial.serial對象,換行符是\ r。 然後這將讀取到行尾,並將所有內容以字符串形式返回到'\ r'。

def read_value(encoded_command): 
    s.write(encoded_command) 
    temp = '' 
    response = '' 
    while '\r' not in response: 
     response = s.read().decode() 
     temp = temp + response 
    return temp 

而且,順便說一句,我實現了您上面談到的,它1)慢得多; 2)以某種方式使端口關閉io.TextIOWrapper建議。