Python os.read阻塞直到换行符

时间:2016-12-12 21:53:06

标签: python file python-3.x

我将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)

昨天,这一切都按照我的预期运作。如果没有要读取的内容,则立即返回读取命令,零字节。

今天我将代码添加到项目的另一部分,该部分写入文本文件并包含一个线程RLock。现在上面的代码做了不同的事情。如果没有等待读取的字节,或者有等待读取的字节但它们没有以0x0D结尾,则会出现错误:

BlockingIOError: [Errno 11] Resource temporarily unavailable

但是有些字节等待读取以0x0D结尾,读取函数返回包含0x0D的字节。

更新:我已经重新格式化了系统,故障并没有消失,这表明不是文件和线程锁定代码的添加导致了这个问题。

我运行minicom并且问题已经消失,所以在我将其作为文件打开之前,我应该在设备上进行串行配置吗?

这是将os.read返回其原始行为的行:

minicom -b 9600 -o -D / dev / ttyUSB0

1 个答案:

答案 0 :(得分:0)

我强烈怀疑这两种不同的行为与串口上的CTS / RTS流量控制设置有关。尝试打开或关闭CTS / RTS以获得所需的行为。