[問題] readline() 資料中遇到"\n"

作者: FamilyMart (全家是你家)   2018-02-21 22:16:15
新手上路 一直在這個問題點上無法突破
試過我能想到的方法 但是一直在一個輪迴裡面 無法突破
個人專題需要和別的系統溝通
也就是我傳 \x04\x05\xaf.... 這樣的資料格式
透過系統回傳給我的 \x32\x85\xaa..... 來做確認資料有沒有更新
主要我是透過 ser.readline() 將一整個資料讀進來
判斷最後三筆是否為 \0x60\0x00\x86 86為 CRC 驗證碼
在偶然間我發現一個錯誤常發生 也就是 readline()時
回傳的資料裡 \xb4\x83\n 中間出現了 \n 因此
(回傳資料 \x00\x03\xef\x98Pb\x10'\xb4\x83\n)
後面再透過 readline 一次又可以讀到後面的漏掉的資料
(漏掉的資料 \x00\x00\x60\x00\xa2)
因為是偶然發生沒有收到完整的資料狀況
我有點想不透該如何去處理
我個人寫法是
Rx = ser.readline()
Rx2 = binascii.b2a_hex(Rx)
Rx3 = str(Rx2)
Rx4 = hex(Rx3)
check = Rx4[-7:-3:1]
if check = "6000"
print("OK")
至於為什麼這樣寫 一直在轉換型態 是因為每次出現什麼 Error code
我就硬查資料把它轉到不會出現 Error 的狀態
我已經查了也試了不少方法 但是已經搞到我自己都不知道在幹嘛了
希望高手能給我一條繩子一個方向 讓我爬出這個奇怪的坑洞
麻煩高手指點
作者: goldflower (金色小黃花)   2018-02-21 22:49:00
沒很懂 不是while去readline到沒東西就好嗎@@?
作者: WunoW (WunoW)   2018-02-21 23:19:00
readline看到換行字元就認為資料到尾端了不是很正常嗎你先確定readline是不是跟你講的一樣是讀到"一整個資料"
作者: djshen (djshen)   2018-02-22 00:25:00
不然資料應該讀到哪裡?
作者: uranusjr (←這人是超級笨蛋)   2018-02-22 00:27:00
直接用 read 不就好了, 沒有分行概念為什麼要 readline希望你 Python 是自學的不然又多一個老師需要打斷腿
作者: kaneson (Lance)   2018-02-22 01:08:00
data有被readline() 切斷的現象基本上就要搭配while loop, readline本身就是設計給讀文字data專用的, 比較通用的做法是while loop 加 read
作者: s860134 (s860134)   2018-02-22 01:30:00
我的老師都很多條腿
作者: a830307119 (天生我材必有用)   2018-03-03 07:10:00
作者: galeondx   2018-03-06 04:41:00

Links booklink

Contact Us: admin [ a t ] ucptt.com