簡體   English   中英

Python os.read塊,直到換行符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM