[Python] Gestion de processus

Gestion de processus [Python] - Python - Programmation

Marsh Posté le 06-10-2005 à 18:16:46    

Je veux manipuler plusieurs programme via une appli python, pour faire entre autre quelque chose de ce genre:
 

Code :
  1. p = j_execute('/usr/bin/commande arg1 arg2 arg3')
  2. while p.est_actif():
  3.       if heure < heure_de_fin:
  4.              time.sleep(1)
  5.       else:
  6.              je_kill(p)
  7.              break


Je pensais assez vite arriver à mes fins, puisque les modules et fonctions ne manquent pas. Mais pourtant...
J'ai commencé avec Python 2.3.5 et les module os, popen2. Rien à faire.
J'ai installé Python 2.4, avec le module subprocess. Rien à faire.
 
Le problème est toujours le meme, quelque soit la fonction, quand le programme se termine avant l'heure_de_fin, il fait quitter mon appli python.  
J'ai essayé d'utiliser le module signal, pour capturer le signal QUIT ou KILL renvoyé par le programme. Ca fonctionne. Sauf que avec les threads, on ne peut utiliser signal que dans le thread principal :/ Donc je suis coincé.
Si quelqu'un peut me dépanner, il va sauver une appli python de terribles os.fork(), suivis de os.system('for i in `pidof appli`; do kill -9 $i; done').
 


---------------
Fly you fool
Reply

Marsh Posté le 06-10-2005 à 18:16:46   

Reply

Marsh Posté le 06-10-2005 à 18:47:38    

je n'en crois pas un mot ...

Reply

Marsh Posté le 06-10-2005 à 19:05:33    

Code :
  1. #! /usr/bin/env python
  2. from subprocess import Popen,PIPE
  3. import os, time
  4. cmd = 'quelque-chose -a -b fichier.cap'
  5. p = Popen(cmd,shell=True,stdin=PIPE,stdout=PIPE,close_fds=True)
  6. print "ok",p.pid
  7. while True:
  8.         if p.poll() == None:
  9.                 print "Running"
  10.                 time.sleep(1)
  11.         else:
  12.                 print "End"
  13.                 print p.stdout.read()
  14.                 break

L'exécution:

airbat@Lhynn ~/code/projet $ ./test.py  
ok 28904
Running
Running
Running
Running
Running
Running
Running
Running
Running
Running
Running
Quitter
airbat@Lhynn ~/code/projet $


:/


---------------
Fly you fool
Reply

Marsh Posté le 06-10-2005 à 19:07:26    

Code :
  1. if( ret == SUCCESS ) kill( 0, SIGQUIT );
  2.     if( ret == FAILURE ) kill( 0, SIGTERM );
  3.     _exit( ret );


La fin du code du programme en question. Si ça peut aider...


---------------
Fly you fool
Reply

Marsh Posté le 06-10-2005 à 19:56:19    

???

Reply

Marsh Posté le 06-10-2005 à 20:24:29    

A noter qu'en remplaçant ma commande par 'uptime', tout se passe comme prévu.

airbat@Lhynn ~/code/projet $ ./test.py  
ok 29080
Running
Fin
 20:17:31 up  8:10,  6 users,  load average: 0.11, 0.19, 0.09


---------------
Fly you fool
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed