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 :

executer programme externe appliqué à un autre path [Python 3.X]


Sujet :

Python

  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut executer programme externe appliqué à un autre path
    Bonsoir,
    Je réussi sans problème à compiler un fichier .tex avec python lorsque le fichier en question est dans le répertoire courant. Il me suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import os
    fichier="toto"
    os.system("latex %s.tex" % fichier)
    os.system("dvips -o %s.ps %s.dvi" % (fichier,fichier))
    os.system("ps2pdf %s.ps" % fichier)
    Là où je rencontre un problème, c'est que dans le cas présent, mon fichier .tex est dans un autre répertoire.
    Je suis revenu à un cas simple mais cela ne fonctionne pas du tout. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import os
    fichier="/media/Disque-4To/TSI_Phys/colles_19-20/colles-sup/thermochimie_sup/toto"
    os.system("latex %s.tex" % fichier)
    os.system("dvips -o %s.ps %s.dvi" % (fichier,fichier))
    os.system("ps2pdf %s.ps" % fichier)
    Si quelqu'un peut m'aider, j'ai essayé pas mal d'options dont subprocess et autres.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Alors si mes souvenirs sont bons, Latex compilé fournit un dvi.

    Donc si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.system("latex %s.tex" % fichier)
    je pense que le dvi de sortie ne se trouvera pas dans le même dossier que fichier, mais dans le répertoire courant.

    Comme tu ne donnes pas trop l'erreur, ça reste une supposition ce que je dis.
    Un bon moyen pour confirmer est déjà de juste mettre le 1er appel à os.system, et de regarder où se trouve tes fichiers de résultats de cette 1ere étape (les dvi donc).

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oups ! Merci.
    J'avais déjà fait cela et il ne se passe rien du tout excepté le fichier log qui est créé dans le répertoire courant.
    Dans ce fichier log est noté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! LaTeX Error: File `../preambule-colle-pcsi_a4.tex' not found.
    En effet, mon fichier .tex fait lui-même appel à un fichier externe et c'est à cause de cela que ça plante.

    Pour éviter cette erreur, il faut absolument (si c'est possible bien entendu mais je pense que tout l'est avec python), que la commande soit appliquée dans le répertoire du fichier.
    J'ai essayé avec cd, ... : sans succès.
    Je précise que je suis sous Ubuntu au cas où.

  4. #4
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Bonjour,

    pouvez vous essayez avec subprocess.run en indiquant le paramètre cwd ? Si vous utilisez une vielle version sans run tournez vous vers call
    à moins de ne pas passer d'argument passer une chaîne de caractères à args suffit, sinon c'est un tableau (enfin n'importe un itérable quoi, mais on va pas chipoter), donc vous aurez quelque chose comme subprocess.run(["dvips", "-o", fichier+".ps", fichier+".dvi"], cmd=..., ...)Suivant si vous avez besoin de conserver des logs ou de les afficher dans votre programme, de si vos outils en génère déjà ou non vous pouvez aussi regarder les pipes pour en faire quelque chose

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bonjour,
    En réfléchissant, je me suis dit que j'allais d'abord tester en ligne de commande dans le Terminal (ce que j'aurais dû essayer en priorité) et ça coince.
    Mon souci ne provient donc pas de python...

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bonjour à nouveau.
    Bon, j'ai résolu mon problème avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    repertoire = "/media/marco5/Disque-4To/TSI_Phys/colles_19-20/colles-sup/thermochimie_sup/"
    path = "cd " + repertoire + " && "
    fich = "THCH_sup_corr_a4"
    comm_latex_fich = path + " latex  -syntex=1 -interaction=nonstopmode " + "%s.tex" %fich
    subprocess.run([comm_latex_fich],stdout=subprocess.PIPE,shell=True)
    Merci à vous.

  7. #7
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    t'as quand même vachement envie de te casser la tête pour ce qui est de la gestion des arguments et du cwd
    pas besoin de faire de cd ni de construire ta ligne de commande à la main

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oui, j'ai vu cela mais pas beaucoup d'exemples, je trouve, sur le net. Je vais essayer de creuser avec cwd.

  9. #9
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, effectivement, beaucoup plus simple avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(['latex', '-syntex=1', '-interaction=nonstopmode', fichier+'.tex'], cwd = repertoire)

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

Discussions similaires

  1. execution programme externe par SYSTEM
    Par fender62 dans le forum Fortran
    Réponses: 1
    Dernier message: 16/06/2011, 13h05
  2. executer programme externe via php
    Par said57 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2009, 16h12
  3. [Système] Executer un programme externe depuis un scripte php
    Par Scorpion Rouge dans le forum Langage
    Réponses: 1
    Dernier message: 24/01/2006, 11h59
  4. Réponses: 3
    Dernier message: 05/09/2005, 14h09
  5. [Debutant(e)]Execution d'un programme externe
    Par saidi_chahrat dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/08/2004, 11h35

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