我有以下代码
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)