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