IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec Python Discussion :

gobject main loop and sys.stdin.readline


Sujet :

GTK+ avec Python

  1. #1
    Invit�
    Invit�(e)
    Par d�faut gobject main loop and sys.stdin.readline
    Hello,

    I'm writing an audio player console application.
    This is not purely GTK, but it uses gobject.

    It requires:
    1) running gobject.MainLoop in order to be notified of gstreamer events
    2) catching user input from keyboard

    I try to read user input in a thread, but it does not work.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    self.main_loop = gobject.MainLoop()
    self.thread = threading.Thread(None, self._thread, 'commands thread')
    self.thread.start()
    self.main_loop.run()
    Then, in my thread:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    def _thread(self):
        cmd = sys.stdin.readline().strip()
        print cmd
    User input is not read in the thread until I stop main loop (control-c).

    How can I run main loop and listen to user input at the same time?

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Oups... A force de poser des questions sur des forums en Anglais, j'ai oubli� que j'�tais sur un forum fran�ais... d�sol�.

    Je reprends. J'�cris un lecteur audio en mode console (enfin de base il est en GTK mais je propose aussi une version en mode console). En mode console, m�me si on n'utilise pas GTK, on utilise quand m�me gobject pour gstreamer.

    D'un c�t�, j'ai besoin de faire tourner gobject.MainLoop pour �tre notifi� des �v�nements gstreamer (fin de fichier, etc...). Cet appel est bloquant.

    De l'autre c�t�, je veux que l'utilisateur puisse taper des commandes (pause, stop, next...).
    J'ai donc pens� lancer un thread qui va lire les entr�es clavier.

    Le probl�me est que le code de ce thread n'est pas lanc�, tant qu'on n'est pas sorti de l'appel self.main_loop.run() (cf le code dans mon premier message), ce qui arrive par exemple avec control-c.

    En fait, mon probl�me n'a pas l'air d'�tre li� � sys.stdin.readline comme je pensais au d�but, puisque le code du thread n'est pas du tout ex�cut�.

    Comment ex�cuter du code en parall�le de gobject.MainLoop ?

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    Ca n'a pas �t� facile, mais j'ai trouv� la solution (pourtant simple finalement).
    Il faut en fait autoriser les threads dans gobject, en appelant :

    Plus de d�tails ici :

    http://stackoverflow.com/questions/3...t-the-top-of-m

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. sys.stdin dans pyscripter
    Par aschreck dans le forum G�n�ral Python
    R�ponses: 2
    Dernier message: 21/06/2013, 19h31
  2. RuntimeError: main thread is not in main loop
    Par bender86 dans le forum GTK+ avec Python
    R�ponses: 0
    Dernier message: 30/07/2011, 12h21
  3. Test non bloquant de pr�sence de caract�res dans sys.stdin?
    Par tyrtamos dans le forum G�n�ral Python
    R�ponses: 2
    Dernier message: 31/08/2008, 19h05
  4. integrer les messages des fenetres dans une main loop
    Par d'Oursse dans le forum Windows
    R�ponses: 3
    Dernier message: 15/06/2007, 19h29
  5. R�ponses: 2
    Dernier message: 02/03/2007, 02h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo