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 :

Enchainement de deux commandes Popen


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Enchainement de deux commandes Popen
    Bonjour,
    Je cherche à exécuter en boucle les commandes suivantes (avec Python 3.1a1 sous windows xp):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for step in range(0, maxi, 25):
        chopData(parameters)
        analyse = subprocess.Popen("PROGR.exe X25.file X25.out 1 1 1 0", shell = True)
        analyse.wait()
        print("check", analyse.poll())
        ecrire = subprocess.Popen(["copy", "X25.out+X.out", "X.out"], shell = True)
    En bref, j'ai un grand tableau de données avec plusieurs milliers de colonnes. Je le tronçonne en fichiers plus petits, X25.file, avec chopData car PROGR.exe ne peut traiter que 25 colonnes à la fois. Je voudrais ensuite copier le fichier de sortie X25.out généré par PROGR.exe à chaque itération dans un seul fichier, X.out.

    Mon problème:
    subprocess.Popen("copy X25.out+X.out X.out") n'est pas exécuté: j'ai le message suivant:
    X25.out
    Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus.
    0 fichier(s) copié(s).
    Malgré analyse.wait(), analyse.poll() retourne 0.
    Il n'y a pas de plantage. Les boucles se succèdent sans problème, mais sans que le nouveau fichier X25.out soit "appendu" à X.out.
    Merci beaucoup de votre aide.
    Bijean

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Salut

    Il faut que tu trouves quel processus bloque ce fichier. Il se peut que ce ne soit pas Python.

    Pour faire ça, tu peux intercaler entre les deux traitements un
    et, pendant que le programme est en pause, utiliser Unlocker pour savoir quels processus bloquent ce fichier.

    Il se peut aussi que la libération du fichier prenne un peu de temps, si par exemple PROG.exe ne le ferme pas correctement. (Je n'ai aucun certitude sur ce dernier point, mais c'est quelque chose à envisager). Encore ici, utilise le system("PAUSE") et laisse passer quelques secondes.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci infiniment pour ta réponse.
    Suivant ton conseil, j'ai inséré une pause après chaque commande et j'ai regardé avec unlocker:
    en fait, c'était le fichier X.out qui était "attaché" par python et aussi par cmd.exe; X25.out (comme X25.file) était sans attache.
    La raison était que j'avais créé le fichier X.out avec open("X.out",'w') avant l'initiation de l'itération sans le refermer.
    D'accord, ce n'était pas malin!
    Mais si j'avais eu le message de Python avec X.out au lieu de X25.out, je m'en serai rendu compte plus vite.
    Le script tourne maintenant de façon impeccable.
    En tous cas, je suis sûr que ton tuyau me servira encore beaucoup.
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Finir une commande Popen
    Par ju_bicycle dans le forum Général Python
    Réponses: 5
    Dernier message: 03/08/2009, 16h56
  2. deux commandes sous windows dans runtime.exec()
    Par PhilippeDDD dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2009, 08h39
  3. délais d'attente entre deux commandes
    Par vince2005 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/02/2008, 02h06
  4. Deux commandes en même temps
    Par zoom61 dans le forum IHM
    Réponses: 4
    Dernier message: 25/05/2007, 08h32
  5. Exécuter deux commandes
    Par flouflou dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 13/08/2004, 18h08

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