2017-10-16 14 views
0

Je veux que mes scripts Python puissent être exécutés par des personnes ayant d'autres configurations de dossier, donc utiliser une référence à un dossier dans lequel le script Python est sauvegardé est très logique. Exemple: Si mon script "script_1.py" est exécuté à partir de "C: \ My Scripts \ script_1.py", je veux enregistrer "C: \ My Scripts" dans une variable que je peux utiliser.Quel est le chemin d'accès au dossier dans lequel se trouve mon script Python?

Cependant, je ne peux pas le faire fonctionner trop.

J'ai import os et sys, mais en utilisant os.path.dirname(__file__) ou os.path.abspath(__file__) affiche le message d'erreur:

Traceback (most recent call last): 

File "<ipython-input-24-1830932ce69b>", line 1, in <module> 
os.path.dirname(__file__) 

NameError: name '__file__' is not defined 

En utilisant sys.executable me donne l'adresse à l'endroit où mon Python est installé (je pense ?? Il ne donne moi ce que je cherche de toute façon).

m'a aussi donné des conseils pour essayer os.environ['_'] mais qui donne:

Traceback (most recent call last): 

File "<ipython-input-26-6c75f8b10c6d>", line 1, in <module> 
os.environ['_'] 

File "D:\Continuum\Anaconda3\lib\os.py", line 669, in __getitem__ 
    raise KeyError(key) from None 

KeyError: '_' 

Je suis en mon code à partir de Windows 10 par le chemin. C'est Python 3.

+3

'__file__' vous donne une erreur parce que vous l'utilisez dans une session interactive, il n'y a pas de fichier, en essayant d'obtenir le fichier doesnt logique – jonatan

+0

@jonatan je ne savais pas que mais a beaucoup de sens. Merci. –

Répondre

1

Ceci vous donnera l'emplacement de votre script.

import os 
import sys 
script_location = os.path.split(os.path.realpath(sys.argv[0]))[0] 
+0

Quand est-ce que ce serait mieux que 'script_location = __file__'? Si importé, '__file__' fonctionnera toujours, mais ce ne sera pas – jonatan

+0

Bonne question ... Je n'y ai jamais vraiment pensé. Je suppose que la seule vraie différence est que '__file__' va vous donner l'emplacement du fichier en cours d'exécution, pas forcément votre programme principal ... donc cela dépend de ce que vous essayez de comprendre? –