我有以下代码
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个字节可用。
问题是:如何使.read()
上的os.fdopen()
'ed文件对象的行为相同? (又名非阻塞)
答案 0 :(得分:2)
可能有更好的方法,但您可以使用fcntl
module设置O_NONBLOCK
:
import fcntl
r, w = os.pipe()
fcntl.fcntl(r, fcntl.F_SETFL, os.O_NONBLOCK)
…
答案 1 :(得分:2)
使用io.open()
代替os.fdopen()
请注意,您必须使用buffering=0
才能生效:
rf = io.open(r, 'rb', 0)
rf.read(10)