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

mpe*_*son 9 python file pipe

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

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

var*_*tec 15

你可以试试这个.

import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 
Run Code Online (Sandbox Code Playgroud)

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

pipe(7)手册页:

如果进程尝试从空管道读取,则read(2)将阻塞,直到数据可用.(...)通过使用fcntl(2)F_SETFL操作启用O_NONBLOCK打开文件状态标志,可以实现非阻塞I/O.