Busco un método en Ruby, que es básicamente el siguiente:¿Existe un método simple para verificar si una instancia de Ruby IO se bloqueará en read()?
io.ready_for_read?
sólo quiero comprobar si un objeto dado IO
(en mi caso, el resultado de una llamada popen
) tiene salida disponible, es decir, una llamada de seguimiento io.read(1)
no bloqueará.
Estas son las dos opciones que veo, ninguno de los cuales me gustan:
io.read_nonblock
- una abstracción demasiado delgada de Unixread()
- Yo no quiero tratar conerrno
tratamiento de errores.io.select
con tiempo de espera 0 - ofusca el propósito de esta operación simple.
¿Hay alguna alternativa mejor que he pasado por alto?
No lo creo. Esto es realmente para lo que se selecciona. Sí, select tiene una sintaxis horrible, pero supongo que, en teoría, podrías poner en parche un "ready_for_read?" escriba el método en IO que usa seleccionar. –
Esa implementación 'IO # ready_for_read?' No funciona para mí, siempre devuelve verdadero. Creo que el problema es que 'IO # select' bloquea hasta que la secuencia se abre para la escritura por otro proceso (que en mi caso siempre es así), no hasta que haya datos reales para leer.Estoy tratando de encontrar otra forma de lograr esto, pero no estoy teniendo mucha suerte. –