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 :

Exécuter un programme (avec des options) avec subprocess.call


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 65
    Par défaut Exécuter un programme (avec des options) avec subprocess.call
    Bonsoir.
    Je souhaite exécuter dans un programme python un fichier qui s'appelle pdflatex.exe
    Celui-ci s'applique à un autre fichier dont l'extension est .tex avec des options.
    Dans la console Windows, je tape ceci pour que ça marche :
    pdflatex.exe -output-directory F:/Poubelle/essai F:/Poubelle/essai/essai.tex
    (-output-directory F:/Poubelle/essai doit être écrit avant le nom du fichier tex et est obligatoire ici)

    Dans Python2.7, j'utilise le module subprocess avec cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    programme = "pdflatex.exe"
    argument = '-output-directory '+self.chemin_dossier_exercice+'/'+self.nom_exercice+' '+self.chemin_dossier_exercice+'/'+self.nom_exercice+'/'+self.nom_exercice+'.tex'
    subprocess.call([programme, argument])
    argument contient bien la chaîne qui doit être passée à pdflatex::
    -output-directory F:/Poubelle/essai F:/Poubelle/essai/essai.tex

    Ça ne marche pas.
    Je n'ai pas de message dans la console Python, ni dans la console Windows.
    Le log de pdflatex.exe m'indique: FATAL pdflatex - The command line options could not be processed. FATAL pdflatex - Info: optionError="unknown option"
    Comment faire pour que l'option -output-directory F:/Poubelle/essai soit reconnue ?
    J'ai essayé avec un autre séparateur de chemin (\\), en mettant des doubles-guillemets autour de cette chaîne (là j'ai une console windows qui s'ouvre avec ce message d'erreur: This is pdfTeX, Version 3.14159265-2.6-1.40.17 (MiKTeX 2.9.6100 64-bit) entering extended mode! Undefined control sequence)
    Merci pour les réponses.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 059
    Par défaut
    Il y a plusieurs choses à dire,

    1. Pour lier répertoires et fichiers, le plus sûr reste l'utilisation du module os.path avec join.
    2. J'ai l'impression qu'il y a 3 arguments -output-directory, F:/Poubelle/essai et F:/Poubelle/essai/essai.tex, ce qui fait une longueur de liste à 4 éléments et non 2 comme tu le mets.
    3. call, il me semble attend que le processus soit terminé pour rendre la main, dans ta situation je privilégierai la classe Popen, qui n'attend pas la fin du process pour rendre la main.


    Une fois que tu modifies ton code, n'hésites pas à montrer les modification faîtes...

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 709
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 709
    Par défaut
    Salut,

    Lorsque vous utilisez la fonction d'une bibliothèque comme subprocess.call, vous êtes supposé lire le mode d'emploi avant de vouloir coder avec.
    Dans celui ci, on vous indique que "args" doit être une chaîne de caractères ou une liste et on vous indique comment passer de l'un à l'autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import shlex
    >>> s = "pdflatex.exe -output-directory F:/Poubelle/essai F:/Poubelle/essai/es
    sai.tex"
    >>> shlex.split(s)
    ['pdflatex.exe', '-output-directory', 'F:/Poubelle/essai', 'F:/Poubelle/essai/
    essai.tex']
    >>>
    ainsi que les contraintes qu'imposent l'un ou l'autre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [XL-2010] Comment compter des cellules avec des couleurs avec une condition
    Par Aimey dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/11/2015, 03h23
  2. Parser un JSON avec des variables avec des "-" et des ":"
    Par Quentin33 dans le forum Windows Phone
    Réponses: 2
    Dernier message: 22/05/2011, 01h04
  3. Réponses: 1
    Dernier message: 14/06/2009, 23h40
  4. Charger un module automatiquement avec des options debian
    Par ZiMo dans le forum Administration système
    Réponses: 4
    Dernier message: 22/12/2005, 14h22
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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