2010-06-07 9 views
2

Je commence à travailler avec le framework "quick" d'Ubuntu, basé sur python/gtk. Je veux écrire un wrapper gui pour un state-machine C textmode qui utilise stdin/stdout.Ubuntu rapidement (python/gtk) - comment surveiller stdin?

Je suis nouveau sur gtk. Je peux voir que la commande python print va écrire dans la fenêtre du terminal, donc je suppose que je pourrais rediriger cela vers le stdin de mon programme C. Mais comment puis-je obtenir mon programme rapide pour surveiller stdin (c'est-à-dire surveiller les réponses stdout du programme C)? Je suppose que j'ai besoin d'une sorte de boucle d'interrogation, mais je ne sais pas si/où cela est pris en charge dans le cadre "rapide".

Ou la redirection n'est-elle pas la bonne façon de procéder - devrais-je regarder quelque chose comme gobject.spawn_async?

Répondre

2

Je ne suis pas sûr de la structure rapide, mais en Python, vous pouvez utiliser le module de sous-processus qui engendre un nouveau processus enfant mais autorise la communication via stdin/stdout.

http://docs.python.org/library/subprocess.html

Jetez un oeil à la documentation, mais c'est très utile.

Si vous souhaitez effectuer une relève, vous pouvez utiliser un gobject.timeout_add.

Vous allez pouvoir créer quelque chose de fonction comme ceci:

def mypoller(self): 
    data = myproc.communicate() 
    if data[0]: #There's data to read 
     # do something with data 
    else: 
     # Do something else - delete data, return False 
     # to end calls to this function 

et qui vous permettent de lire les données de processus.

+0

Wow ... merci pour une réponse rapide. Je vais lire à ce sujet. – neil