Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

19.2. Contrôler les Entrées/Sorties

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.