Wie liest man aus einem os.pipe () ohne blockiert zu werden?

8

Ich versuche, von einem offenen os.pipe() zu lesen, um zu sehen, ob es im Moment des Lesens leer ist. Das Problem ist, dass der Aufruf von read() dazu führt, dass das Programm dort blockiert, bis dort tatsächlich etwas zu lesen ist, aber es wird nichts geben, wenn der Test, den ich mache, erfolgreich ist.

Ich weiß, dass ich select.select() mit einem Timeout verwenden kann, aber ich wollte wissen, ob es eine andere Lösung für das Problem gibt.

    
mpeterson 03.07.2014, 01:47
quelle

1 Antwort

14

Du könntest das versuchen.

%Vor%

Damit sollte thePipe.read() nicht blockierend sein.

Von pipe (7) man-Seite:

  

Wenn ein Prozess versucht, von einem zu lesen   leeres Rohr, dann lesen (2) wird blockiert   bis Daten verfügbar sind. (...)   Nicht blockierende E / A ist möglich mit   die Operation fcntl (2) F_SETFL an   Aktivieren Sie den Status O_NONBLOCK geöffneter Dateien   Flagge.

    
vartec 03.07.2014, 01:52
quelle

Tags und Links