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

Python Discussion :

Finir une commande Popen


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut Finir une commande Popen
    Bonjour a tous,
    Alors voila un petit probleme qui semble récurrent sur la toile et pourtant je ne trouve aucune solution que j'arrive a faire fonctionner.

    En gros, je veux lancer une commande via un script python, laisse tourner la bête en tache de fond tout en sauvegardant le résultat dans un fichier texte. Jusqu'ici tout va bien. Par contre, la ou ca ne le fais pas du tout, c'est quand je cherche a arréter cette foutu commande. J'ai essayé ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import time
    from subprocess import *
     
    file_1 = open ('result_ping.txt','w')
     
    pipe2 = Popen(["ping", "192.168.94.67"],stdout=file_1)
     
    time.sleep(5)
    pipe2.terminate()
     
    print "Ok c'est fini"
    Et la commande pipe2.terminal() me fais tout planter
    "AttributeError: 'Popen' object has no attribute 'terminate'", chose que je ne comprend pas puisque je l'ai trouvé dans la doc officiel.

    Quelqu'un a une idée?

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Je viens de tester. Ton code marche sous Python 2.6 mais pas sous Python 2.5. Ton problème vient sûrement de là.

    Ton code permet d'arrêter le processus au bout de 5 secondes. C'est bien cela, je ne fais pas fausse route.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    La vache...MERCI
    En fait jusqu'a hier je travaillais dans un environnement windows avec python 2.6.
    Ce matin j'suis passé à Linux sur lequelle python est installé par défaut...Et donc je ne me suis absolument posé aucune question quant à la version que j'utilisais...
    Bref merci merci beaucoup
    Ca fais 3h que je galere la desus!!!

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Peux-tu répondre à ma question en retour ?

    Sur ce, je ferme l'ordi.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Oupps sorry!
    Oui oui exactement mon code permet de pinger un ordinateur distant pendant 5 seconde, et de stocker le résultat de l'opération dans un fichier text...

    Pour info, pour ceux qui se poseraint la question:
    Popen permet de lancer une commande facon "multithread". C'est a dire qu'elle laisse la main au programme qui peut continuer...(trés pratique :p)

    Merci!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Salut a tous
    je redéterre mon sujet suite a une nouvelle consigne du cahier des charges.
    En fait je suis obligé d'utilser python 2.5
    Donc, évidemment les méthode Popen.terminate & méthode Popen.kill n'existent plus.

    J'ai trouvé ca comme méthode, mais ca m'a l'aire super moche, puisque subprocess a justement été créer pour mieux gérer les executions de fichier externe.

    But du prog:
    De la machine C, lancer un ping de A vers B pendant 5 secondes et stocker le resultat de ce ping dans un fichier

    (J'avais fais ici un bijou de dessin ASCII, mais ce con de forum me le détruit lors de la mise en forme du message )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import time,os,signal
    from subprocess import *
    file_2 = open ('result_ping','w')
     
    pipe=Popen("ssh 192.168.94.67 ping 192.168.92.25",shell=True,stdout=file_2)
     
    time.sleep(5)
     
    os.kill (pipe.pid,signal.SIGQUIT)
     
    file_2.close()
    print "Ok c'est fini"
    De plus je ne comprend pas spécialement bien la méthode os.kill et la doc officielle est extrement maigre:
    os.kill(pid, sig)¶
    Send signal sig to the process pid. Constants for the specific signals available on the host platform are defined in the signal module. Availability: Unix.
    Pourquoi est-on obligé d'envoyer un signal "sig". Il me semble que si on utilise la commande "kill" le signal que l'on souhaite envoyer est relativement claire...De plus mon programme fonctionne tjs si a la place de signal.SIGQUIT je met un entier (ex:9)
    képassa??

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/12/2015, 08h15
  2. Réponses: 2
    Dernier message: 13/02/2009, 17h04
  3. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  4. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36
  5. Finir une application
    Par Lucien dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/04/2003, 09h15

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