[英]Python os.read blocks until newline character
我有一個XBee插入Raspberry PI。 這是我正在使用的Python 3.4代碼:
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返回其原始行為的行:
minicom -b 9600 -o -D / dev / ttyUSB0
我強烈懷疑這兩種不同的行為與串行端口上的CTS / RTS流控制設置有關。 嘗試打開或關閉CTS / RTS以獲取所需的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.