Bonjour,
Je cherche à faire un truc qui me parait simple sur le principe, mais vu que je ne trouve aucune indication sur le net malgré bien des recherches, je me demande si je cherche à faire quelque chose d'irréalisable (ce qui prouverait que mon raisonnement est faux) ou si c'est tellement simple que je suis passé à côté de quelque chose.
J'ai un programme python (bavard.py) qui fonctionne correctement de façon indépendante (lancé directement). Il affiche des retours dans la console au fur et à mesure de sa longue progression. Un exemple pourrait être ce code:
Je cherche à pouvoir traiter les messages renvoyés par ce programme depuis un autre au fur et à mesure de leur apparition (pour afficher certains et pas d'autres en fonction de ce qui est voulu, pour les mettre dans une interface graphique, pour compter certaines opérations et ne renvoyer que ce résultat, ... Peu importe, l'important étant de les récupérer)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/usr/bin/env python # -*- coding: utf-8 -*- import os, sys import time def parle(): print "Je fais ceci1" time.sleep(4) print "je fais cela2" time.sleep(10) print "Je fais ceci3" time.sleep(5) print "je fais cela4" time.sleep(3) if __name__ == '__main__': parle()
J'arrive à créer mon programme, à importer bavard, à lancer bavard.parle() mais pas à traiter les messages au fur et à mesure
J'ai essayé avec des threads, avec subprocess, les deux ensemble, mais à chaque fois, les messages arrivent tous d'un coup une fois le long traitement terminé. Et c'est pas le comportement souhaité.
Je précise que je ne suis pas le mainteneur du programme bavard.py, qu'il est très long et spécifique, et qu'il n'est pas question de coller le code dans mon programme alors qu'il fonctionne bien seul et que ça deviendrait non maintenable à chaque mise à jour.
J'ai bien compris qu'il me faut un thread principal qui va traiter les messages comme je le veux, un thread pour faire tourner bavard en arrière plan, et une queue pour la communication entre les deux.
Comment recevoir et traiter les infos (que je vois sur la console) de bavard.parle() ?
Comment envoyer ces messages dans la queue? J'ai même esssayé de rediriger stdout sans succès.
Dans tous les cas, je n'ai pas réussi à faire un traitement simultané, les messages de bavard apparaissant d'un bloc à la fin du traitement. Alors que quand j'envoie manuellement (par code) des infos dans la queue, le traitement est effectué...
J'apprécierais beaucoup un bout de code fonctionnel que je pourrais tester à loisir pour comprendre comment ça doit se passer, ou des indications pour arriver à faire fonctionner ce programme.
Est ce qu'on peut arriver à faire ça avec python? Est ce que je demande un truc irréalisable? Est ce que mon raisonnement est à côté de la plaque et que je passe loin de la méthode?
J'ai déjà plus de cheveux, mais je suis surpris à être le seul à avoir ce problème![]()
Partager