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

PyQt Python Discussion :

Appel d'un exe par un autre exe


Sujet :

PyQt Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 423
    Points : 133
    Points
    133
    Par défaut Appel d'un exe par un autre exe
    Bonjour,

    J'ai développé une appli PyQt et crée l'exécutable. L'exe utilise un fichier .ini pour la gestion des paramètres de l'appli, qui est placé dans le même répertoire que l'exe.
    Dans le lancement de mon appli, j'ai le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inifile = './monappli1.ini'
     
    config = configparser.ConfigParser()
    config.read(inifile)

    J'ai une deuxième appli qui doit appeler la première appli quand je clique sur un bouton. L'exe de cette appli est dans un autre répertoire que la première appli.
    Mais ça plante vu que quand je clique sur le bouton de lancement, le chemin courant est le chemin de la deuxième appli, et donc le fichier './monappli1.ini' n'existe pas.

    Au lieu de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inifile = './monappli1.ini'
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inifile = f'{os.getcwd()}/monappli1.ini'
    mais ça plante quand même, parce que au moment de l'appel, dans os.getcwd() renvoie le chemin de l'exe de la deuxième appli.

    Donc comment faire pour que l'exe de la première appli aille cherche le fichier .ini dans ce même répertoire?

    Merci,
    Nico

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Python est un langage interprété: il n'y a pas "d'exécutable".
    Mais peut être que vous appelez "exe" le package fabriqué par un pyinstaller/cx_freeze?

    Sinon, vous pouvez toujours lancer la 2nd application avec le répertoire où aller piocher le fichier .ini.
    note: la deuxième application ne va pas "inventer" une information qu'elle n'a pas => il va falloir la passer d'une façon ou d'une autre.

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

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    effectivement "l'exécutable" a été crée avec pyinstaller.

    Nico

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    effectivement "l'exécutable" a été crée avec pyinstaller.
    Vous auriez le même problème "sans" i.e. des scripts Python "normaux" où on lance un script qui sait comment lancer le 2nd mais le 2nd pourra récupérer le répertoire courant (de l'utilisateur) mais pas celui où est le premier script: il va falloir passer cette information "explicitement" (argument d'appel, variable d'environnement, ...)

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

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par DiverSIG Voir le message
    Dans le lancement de mon appli, j'ai le code inifile = './monappli1.ini'
    C'est pas bon. Et si tu te trouves ailleurs quand tu lances l'appli? Elle ne trouvera pas le ini. C'est d'ailleurs exactement ce qui se passe quand tu fais exécuter cette appli par une autre qui se trouve ailleurs.
    Si le ini est dédié à l'appli, alors tu ne dois pas travailler en relatif par rapport à l'user qui l'exécute!!!

    Tu peux passer par des chemins absolus mais cela posera un souci si l'appli est déplacée. Le mieux c'est encore que l'appli récupère son chemin au lancement. Or à l'exécution, ce chemin est automatiquement stocké dans une variable interne "__file__".
    Donc en récupérant le contenu de cette variable, tu peux en déduire son chemin et utiliser ce chemin quand tu vas chercher le ".ini" et cela règlera tous tes soucis d'appels.

    Et tout ça n'a absolument rien à voir avec PyQt.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 423
    Points : 133
    Points
    133
    Par défaut
    Dans mon fichier python, je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(os.path.dirname(__file__))
    ça m'affiche bien le chemin de mon script, et donc du fichier .ini placé au même endroit.
    Dans le début de mon traitement, je teste si je trouve le fichier ini, sinon, j'affiche un message d'erreur

    Ensuite je crée mon "exe" avec pyinstaller. Quand je lance l'exe, il m'affiche le message d'erreur, car il cherche le fichier ini dans C:\Users\ngabar\AppData\Local\Temp\_MEI77482\monfichier.ini

    Dans ce répertoire .../Local/Temp, il y a des dll Qt5 et autres fichiers Python, comme si en lançant l'exe, il avait dezippé des choses dans ce répertoire, et ensuite, ça devient le répertoire source ...

    Nico

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    Dans ce répertoire .../Local/Temp, il y a des dll Qt5 et autres fichiers Python, comme si en lançant l'exe, il avait dezippé des choses dans ce répertoire, et ensuite, ça devient le répertoire source ...
    Voilà: ce n'est pas un exécutable... mais un "paquet" à déballer avant emploi.

    Concernant votre fichier .ini: soit c'est un truc modifiable par l'utilisateur (et il devrait être dans un sous répertoire de l'utilisateur) soit c'est un paquet de valeurs par défaut de l'application (que l'utilisateur ne pourra pas changer) et autant mettre cela dans un module python.

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

Discussions similaires

  1. [Python 3.X] Problème de valeur par défaut lors de l'appelle d'un script par un autre
    Par ikemoije dans le forum Tkinter
    Réponses: 4
    Dernier message: 03/04/2023, 15h39
  2. Réponses: 3
    Dernier message: 12/10/2017, 16h09
  3. optimisation en cas d'appel d'une prostock par une autre
    Par bibouilles dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/11/2012, 13h18
  4. Appel d'une fonction par une autre
    Par maparè dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2010, 15h57
  5. Réponses: 11
    Dernier message: 05/10/2006, 13h20

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