2009-03-23 8 views
8

J'essaie de lire à partir d'un os.pipe() ouvert pour voir si elle est vide au moment de la lecture. Le problème est que l'appel read() provoque le blocage du programme jusqu'à ce qu'il y ait quelque chose à lire, mais il n'y en aura pas, si le test que je fais réussit.Comment lire depuis un os.pipe() sans être bloqué?

Je sais que je peux utiliser select.select() avec un timeout mais je voulais savoir s'il y avait une autre solution au problème.

Répondre

14

Vous pourriez essayer.

import os, fcntl 
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

Avec cette thePipe.read() devrait être non-blocage.

De pipe(7) page man:

Si un processus tente de lire un tube vide, puis lire (2) bloquera jusqu'à ce que les données sont disponibles. (...) Les E/S non bloquantes sont possibles en utilisant l'opération fcntl (2) F_SETFL à activer le O_NONBLOCK statut de fichier ouvert .

+1

Merci beaucoup. C'est exactement ce dont j'avais besoin. – mpeterson

+1

Yesssss! Je vous remercie! – juliomalegria

+0

attention: les méthodes de fichiers telles que '.readline()' peuvent ne pas s'attendre à un mode non-bloquant. – jfs

Questions connexes