10

我正在尝试从开放中阅读,os.pipe()以查看阅读时它是否为空。问题是调用read()会导致程序在那里阻塞,直到那里实际上有一些东西可以读取,但是如果我正在做的测试成功,就不会有任何东西。

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

4

1 回答 1

16

你可以试试这个。

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 。

于 2009-03-23T17:54:55.127 回答