繁体   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