我正试着从一个开放的os.pipe()
读取,看看它在阅读时是否为空。问题是调用read()
导致程序阻塞,直到实际上有东西要读,但是如果我正在做的测试成功的话就没有。
我知道我可以使用select.select()
超时,但我想知道是否有其他问题的解决方案。
答案 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
打开文件状态 标志。