2017-10-10 7 views
1

J'ai un script qui doit pouvoir sauvegarder son propre chemin complet dans une variable. Jusqu'à présent, j'ai essayé:Trouver le chemin d'un exécutable python

sys.argv[0] 
os.path.realpath(__file__) 
os.path.abspath(__file__) 

Tous ces travaux avec le script python régulier que j'ai. Cependant une fois que je le convertis en un exécutable avec pyinstaller, les méthodes ci-dessus ne fonctionnent plus pour obtenir le chemin du fichier .exe. Ils détectent le .exe comme .py ou ne le détectent pas du tout. Pourquoi est-ce le cas et quelle méthode puis-je utiliser pour obtenir le nom du script, qu'il s'agisse d'un fichier .py ou .exe. Y at-il une fonction qui peut obtenir le chemin d'accès complet du fichier, qu'il s'agisse d'un fichier .py normal ou d'un fichier python .exe. Je suis sur Python 2.7 en utilisant Windows 10

Répondre

0

Cela fonctionne pour toutes les extensions de fichier .py, .exe et même si le .exe est modifié pour .scr le programme fonctionne encore:

import sys 
import os 
print os.path.abspath(sys.argv[0]) 

sortie de ligne de commande:

C:\Users\angus\Desktop>t.py 
C:\Users\angus\Desktop\t.py 

C:\Users\angus\Desktop\dist\t>t.exe 
C:\Users\angus\Desktop\dist\t\t.exe 

C:\Users\angus\Desktop\dist\t>t.scr 
C:\Users\angus\Desktop\dist\t\t.scr 
1

Cela peut faire l'affaire, mais si vous trouvez une meilleure solution, ne pas hésiter à laisser tomber cela.

import subprocess 

path = subprocess.Popen('cd') 
1

Cela fonctionne sur Py 3.4/Win 10.

from win32api import GetCommandLine, GetFullPathName 

print (GetCommandLine()) 

print (GetFullPathName('temp.exe')) 

Sortie:

Microsoft Windows [Version 10.0.15063] 
(c) 2017 Microsoft Corporation. All rights reserved. 

C:\scratch\dist\temp>temp 
temp 
C:\scratch\dist\temp\temp.exe 

C:\scratch\dist\temp> 

I affiche la ligne de commande, car vous pourriez avoir à effectuer des étapes supplémentaires pour isoler le fichier du script nom à utiliser dans GetFullPathName.

Modifier: J'ai fait une correction! Depuis que je connaissais le nom du script (temp.py), je connaissais le nom que pyinstaller attribuerait à l'exécutable (temp.exe), et je pourrais utiliser GetFullPathName contre cela.