On peut vérifier la capacité à lire ou écrire un fichier (un fichier Python ou un fichier de bas niveau du système d'exploitation) et invoquer alors automatiquement un rappel. Ceci est surtout utile pour les applications réseau. La fonction de module gobject :
source_id = gobject.io_add_watch(source
,condition
,rappel
)
... où le premier argument (source
) représente
le fichier ouvert (un entier, descripteur du fichier Python ou du fichier
système de bas niveau) que l'on veut surveiller. La fonction
gobject.io_add_watch
() utilise l'entier descripteur
du fichier de bas niveau de manière interne mais l'extraira de l'objet fichier
Python par la méthode fileno
() si nécessaire.
Le deuxième argument (condition
) précise
ce que l'on veut contrôler. Ce peut être :
gobject.IO_IN - Des données sont disponibles en lecture. gobject.IO_OUT - Le fichier est prêt pour une écriture. gobject.IO_PRI - Il y a des données urgentes à lire dans le fichier. gobject.IO_ERR - Condition d'erreur. gobject.IO_HUP - Blocage (la connexion est rompue, habituellement pour les pipes et sockets).
Celles-ci sont définies dans le module gobject. Comme vous l'avez
déjà compris, le troisième argument, rappel
, est la
fonction que l'on souhaite appeler lorsque les conditions précédentes sont
remplies.
La valeur de retour source_id
peut être utilisée
pour arrêter le contrôle du fichier grâce à la fonction suivante :
gobject.source_remove(source_id
)
La fonction de rappel doit ressembler à :
def rappel_entree(source
,condition
):
... où source
et condition
sont tels que décrits précédemment. La valeur de source
sera le descripteur de fichier de bas niveau et non l'objet fichier
Python (c-a-d la valeur retournée par la méthode de fichier Python
fileno
()).
On peut aussi empêcher la fonction de rappel d'être à nouveau utilisée
en renvoyant zéro ou FALSE
depuis le rappel. Si on
veut que le callback soit réutilisé, il doit retourner TRUE
.