与此相反的是什么?
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
我试过
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, os.O_BLOCK)
但会产生AttributeError: 'module' object has no attribute 'O_BLOCK'
。
为了给出一点背景知识,我将数据以块的形式传送到popen
'ed进程的STDIN中。如果在STDOUT中有数据等待,我需要立即读取它并将其传递回客户端(因此切换到非阻塞)。但是,当我完成管道数据后,我需要阻止,直到我在STDOUT上获得EOF。
如果有更好的方法可以做到这一点(理想情况下是跨平台的?)那么我全都是耳朵
答案 0 :(得分:1)
获取当前标志并关闭O_NONBLOCK位:
flag = fcntl.fcntl(MyStream.fileno(), fcntl.F_GETFL)
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK)