我正在尝试从开放中阅读,os.pipe()
以查看阅读时它是否为空。问题是调用read()
会导致程序在那里阻塞,直到那里实际上有一些东西可以读取,但是如果我正在做的测试成功,就不会有任何东西。
我知道我可以使用select.select()
超时但是我想知道是否有其他解决方案。
你可以试试这个。
import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK)
这thePipe.read()
应该是非阻塞的。
从管道(7)手册页:
如果一个进程试图从一个空管道中读取,那么 read(2) 将阻塞直到数据可用。
F_SETFL
(...) 通过使用 fcntl(2)操作启用O_NONBLOCK
打开文件状态标志,可以实现非阻塞 I/O 。