我正在寻找在Ruby中的方法基本上是这样的:是否有一个简单的方法来检查Ruby IO实例是否会在read()上阻塞?
可用io.ready_for_read?
我只是想检查是否一个给定的IO
对象(在我的情况下,popen
调用的结果)的输出,即跟进电话io.read(1)
不会阻止。
这是两个选择我明白了,这两者都不喜欢:
io.read_nonblock
- 太薄的Unixread()
的抽象 - 我不想处理errno
错误处理。io.select
带有超时0 - 模糊了这个简单操作的目的。
有没有更好的选择,我忽略了?
我不/认为/如此。这真的是选择的目的。是的,选择有可怕的语法,但我想在理论上你可以修改一个“ready_for_read?”。将类型方法转换为使用select的IO。 – 2009-05-31 16:17:24
`IO#ready_for_read?`实现不适用于我 - 它总是返回true。我认为问题在于`IO#select`阻塞,直到流被打开以供其他进程写入(在我的情况下它总是已经存在),直到有实际的数据被读取。我试图找到另一种方式来实现这一点,但我没有太多的运气。 – 2009-08-28 13:51:37