情况:
new_pipe = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) # pipe_path points to a FIFO data = os.read(new_pipe, 1024)
读取偶尔会引起errno -11:资源暂时不可用。
什么时候提出这个错误? 这似乎是非常罕见的,因为常见的情况下返回数据:
从read
系统调用的POSIX规范 (重点是我的):
当试图从一个空的管道或FIFO读取时:
如果没有进程打开管道,read()应该返回0来指示文件结束。
如果某个进程打开管道并设置了O_NONBLOCK,则read()应该返回-1,并将errno设置为[EAGAIN]。
所以基本上你的第二个假设是错的:
如果作者打开了管道,但没有数据在FIFO中,则返回空str('')
这将违反规范,我不能在我的机器上重现这种行为(它提高了我的EAGAIN
)。 这不是一个大问题,但是你可以捕捉异常并重试:
import errno def safe_read(fd, size=1024): ''' reads data from a pipe and returns `None` on EAGAIN ''' try: return os.read(fd, size) except OSError, exc: if exc.errno == errno.EAGAIN: return None raise