如何从os.pipe()中读取而不被阻止?

时间:2009-03-23 15:27:53

标签: python file pipe

我正试着从一个开放的os.pipe()读取,看看它在阅读时是否为空。问题是调用read()导致程序阻塞,直到实际上有东西要读,但是如果我正在做的测试成功的话就没有。

我知道我可以使用select.select()超时,但我想知道是否有其他问题的解决方案。

1 个答案:

答案 0 :(得分:15)

你可以试试这个。

import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

这个thePipe.read()应该是非阻塞的。

来自pipe(7)手册页:

  

如果进程尝试从中读取   空管,然后读(2)将阻止   直到数据可用。 (......)   使用非阻塞I / O是可能的   fcntl(2)F_SETFL操作   启用O_NONBLOCK打开文件状态   标志。