0
我有一個插入樹莓派的XBee。這裏是我正在使用的Python 3.4代碼:Python os.read塊直到換行符
f = os.open("/dev/ttyUSB0", os.O_RDWR | os.O_NONBLOCK)
print("Writing...")
b = bytes("hello","utf-8")
os.write(f,b)
print("Press return to start read")
cmd = input()
print("Reading...")
ret = os.read(f,10)
if ret == None:
print("ret = None")
else:
print("ret = {}".format(ret))
os.close(f)
昨天,這一切都按我的預期工作。 read命令立即返回,如果沒有任何要讀取的內容,則爲零字節。
今天我將代碼添加到寫入文本文件的項目的另一部分,幷包含一個線程RLock。現在上面的代碼做了不同的事情。如果沒有字節等待讀,或有字節等待讀,但他們不以0X0D結束,我得到一個錯誤:
BlockingIOError: [Errno 11] Resource temporarily unavailable
但就是有等待讀取的字節以0x0D結束,讀取函數返回包括0x0D的那些字節。
更新:我已經對系統進行了重新格式化,並且故障沒有消失,這表明它不是添加導致問題的文件和線程鎖定代碼。
我跑minicom和問題已經消失,所以也許我應該做一些設備上的串行配置之前,我打開它作爲一個文件?
這是返回的os.read到原來的行爲線:
小型機-b 9600 -o-D的/ dev/ttyUSB0
你可以包含添加鎖的代碼嗎?換行符聽起來像讀取被緩衝(我知道使用普通的文件類對象作爲迭代器將阻止等待換行符或EOF),但afaik'os.open'返回一個無緩衝的文件句柄 –
謝謝爲答覆。我用鎖定代碼更新了我的問題。 –
您是否關閉了串口的手柄,但仍然從中讀取?如果是這樣,那麼trace.txt文件的底層文件句柄可能與USB端口相同。 Unix操作系統按遞增順序分配文件句柄,並將重新使用句柄。試試這個,看看你自己:https://gist.github.com/jszakmeister/e18607a026749956f0bd7a30cd148fa6 – jszakmeister