OK excuse moi on voit trop souvent des personnes ici qui ne font certainement pas l'effort que tu fais.
Mais en fessant cela j'ai l'impression que le thread n'a pas la main
pour écrire sur le terminal et qu'il l'obtient un cour instant quand
j'appuie sur une touche
Je me demande si le fait que le thread qui lit et le thread qui écoute
peuvent écrire dans le même terminal ne pose pas problème.
C'est possible la gestion des threads est toujours sensible, mais en gros ca devrait fonctionner.
J'ai fait un petit exemple qui fonctionne chez moi (en m'inspirant de ton code):
def viewlog(output):
lin = output.readline()
while lin:
print lin
lin = output.readline()
if __name__ == "__main__":
o = run("top -b")
log(o)
o = run("ping google.fr")
log(o)
while 1:
time.sleep(1)
print "wake"
Après les commande que je lance (ping et top) ne sont peut-être pas un bon exemple, mais ca montre que tu peux arriver à sortir des données depuis différents threads.
Si ton objectif est vraiment un contrôle de daemons, utiliser popen n'est pas le bon choix (il faut mieux utiliser un execv/fork et jouer avec les pids et les signaux). Si tu veux t'inspirer, il y a le module zdaemon de Zope qui fait quelque chose dans ce goût (browse, browse... ah : http://cvs.zope.org/Packages3/zdaemon/Attic/zdaemon.py(...) ).
[^] # Re: Ca avance
Posté par Thomas Hervé . En réponse au message Popen 2/3/4 utilisation. Évalué à 2.
OK excuse moi on voit trop souvent des personnes ici qui ne font certainement pas l'effort que tu fais.
Mais en fessant cela j'ai l'impression que le thread n'a pas la main
pour écrire sur le terminal et qu'il l'obtient un cour instant quand
j'appuie sur une touche
Je me demande si le fait que le thread qui lit et le thread qui écoute
peuvent écrire dans le même terminal ne pose pas problème.
C'est possible la gestion des threads est toujours sensible, mais en gros ca devrait fonctionner.
J'ai fait un petit exemple qui fonctionne chez moi (en m'inspirant de ton code):
import os
import thread
import time
def run(cmd):
input, output= os.popen2(cmd)
input.close()
return output
def log(output):
th = thread.start_new_thread(viewlog, (output,))
def viewlog(output):
lin = output.readline()
while lin:
print lin
lin = output.readline()
if __name__ == "__main__":
o = run("top -b")
log(o)
o = run("ping google.fr")
log(o)
while 1:
time.sleep(1)
print "wake"
Après les commande que je lance (ping et top) ne sont peut-être pas un bon exemple, mais ca montre que tu peux arriver à sortir des données depuis différents threads.
Si ton objectif est vraiment un contrôle de daemons, utiliser popen n'est pas le bon choix (il faut mieux utiliser un execv/fork et jouer avec les pids et les signaux). Si tu veux t'inspirer, il y a le module zdaemon de Zope qui fait quelque chose dans ce goût (browse, browse... ah : http://cvs.zope.org/Packages3/zdaemon/Attic/zdaemon.py(...) ).
Bon courage en tout cas.
--
Thomas