[英]Reading from unbuffered os.fdopen() file object doesn't behave like 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()
os.fdopen()
'ed文件對象的行為相同? (又名非阻塞)
可能有更好的方法,但您可以使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.