从未缓冲的 os.fdopen() 文件对象读取的行为不像 os.read()



我有以下代码

r, w = os.pipe()
rf, wf = os.fdopen(r, 'rb', 0), os.fdopen(w, 'wb', 0)
wf.write('hello')

使用读取时

rf.read(10)

它会永远阻塞。然而,如果我用阅读

os.read(r, 10)

它返回'hello',而不等待10个字节可用。

问题是:如何使os.fdopen()文件对象上的.read()行为相同?(又称非阻塞)

可能有更好的方法,但您可以使用fcntl模块设置O_NONBLOCK:

import fcntl
r, w = os.pipe()
fcntl.fcntl(r, fcntl.F_SETFL, os.O_NONBLOCK)
…

这是通过使用io.open()而不是os.fdopen() 来解决的

请注意,必须使用buffering=0才能工作:

rf = io.open(r, 'rb', 0)
rf.read(10)

相关内容

  • 没有找到相关文章

最新更新