使流read()阻塞

时间:2013-10-02 13:12:28

标签: python fcntl

与此相反的是什么?

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。

如果有更好的方法可以做到这一点(理想情况下是跨平台的?)那么我全都是耳朵

1 个答案:

答案 0 :(得分:1)

获取当前标志并关闭O_NONBLOCK位:

flag = fcntl.fcntl(MyStream.fileno(), fcntl.F_GETFL)
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK)