Je suis à la recherche d'une méthode en Ruby qui est essentiellement ceci:Existe-t-il une méthode simple pour vérifier si une instance Ruby IO se bloquera sur read()?
io.ready_for_read?
Je veux juste vérifier si un objet IO
donné (dans mon cas, le résultat d'un appel popen
) a sortie disponible, à savoir un appel de suivi io.read(1)
ne bloquera pas.
Ce sont les deux options que je vois, ni dont j'aime:
io.read_nonblock
- une abstraction d'Unixread()
trop mince - Je ne veux pas traitererrno
la gestion des erreurs.io.select
avec le délai 0 - obscurcit le but de cette opération simple.
Y a-t-il une meilleure alternative que j'ai oubliée?
Je ne fais pas/pense/ainsi. C'est vraiment ce que le choix est pour. Oui, select a une syntaxe horrible, mais je suppose qu'en théorie vous pouvez choisir un "ready_for_read?" tapez la méthode dans IO qui utilise select. –
Cette implémentation 'IO # ready_for_read?' Ne fonctionne pas pour moi - elle retourne toujours vrai. Je pense que le problème est que "IO # select" bloque jusqu'à ce que le flux soit ouvert pour l'écriture par un autre processus (ce qui est toujours le cas dans mon cas), pas avant qu'il y ait des données à lire.J'essaie de trouver un autre moyen d'y parvenir, mais je n'ai pas beaucoup de chance. –