Ich bin auf der Suche nach einer Methode in Ruby, die dies im Grunde ist:Gibt es eine einfache Methode, um zu überprüfen, ob eine Ruby IO-Instanz bei read() blockiert?
io.ready_for_read?
Ich will nur, ob ein gegebenes IO
Objekt (in meinem Fall das Ergebnis einer popen
Call) hat Ausgang zur Verfügung, das heißt ein Folgeaufruf io.read(1)
wird nicht blockiert.
Dies sind die zwei Optionen, die ich sehen, von denen keines Ich mag:
io.read_nonblock
- zu dünn eine Abstraktion von Unixread()
- ich will nicht miterrno
Fehlerbehandlung behandeln.io.select
mit Timeout 0 - verschleiert den Zweck dieser einfachen Operation.
Gibt es eine bessere Alternative, die ich übersehen habe?
Ich nicht/denke/so. Das ist wirklich was Select ist für. Ja, Select hat eine schreckliche Syntax, aber theoretisch könnte man ein "ready_for_read?" Geben Sie method in IO ein, das select verwendet. –
Diese 'IO # ready_for_read?' Implementierung funktioniert nicht für mich - es gibt immer True zurück. Ich denke, das Problem ist, dass "IO # select" blockiert, bis der Stream zum Schreiben durch einen anderen Prozess geöffnet wird (was in meinem Fall immer schon der Fall ist), nicht bis tatsächlich Daten gelesen werden.Ich versuche, einen anderen Weg zu finden, um das zu erreichen, aber ich habe nicht viel Glück. –