0

这个的反面是什么?

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。

如果有更好的方法来做到这一点(理想情况下是跨平台的?)那么我全神贯注

4

1 回答 1

1

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

flag = fcntl.fcntl(MyStream.fileno(), fcntl.F_GETFL)
fcntl.fcntl(MyStream.fileno(), fcntl.F_SETFL, flag & ~os.O_NONBLOCK)
于 2013-10-02T13:23:53.163 回答