Comment puis-je trouver le répertoire de script avec Python? [dupliquer]

cette question a déjà une réponse ici:

  • comment déterminer correctement le répertoire de script actuel? 13 Réponses

considère le code Python suivant:

import os
print os.getcwd()

j'utilise os.getcwd() à obtenir le fichier de script de l'annuaire lieu . Quand j'exécute le script à partir de la ligne de commande, il me donne le chemin correct alors que quand je l'exécute à partir d'un script exécuté par code dans une vue Django il imprime / .

Comment puis-je obtenir le chemin vers le script à partir d'un script exécuté par une vue Django?

mise à jour:

En résumé, les réponses obtenues jusqu'à présent - os.getcwd() et os.path.abspath() - donnent toutes deux le répertoire de travail actuel peut être ou non le répertoire où réside le script. Dans ma configuration d'hôte web __file__ donne seulement le nom du fichier sans le chemin.

n'y a-t-il aucun moyen en Python pour (toujours) être capable de recevoir le chemin dans lequel réside le script?

360
demandé sur Martin Thoma 2011-02-08 18:14:48

12 réponses

vous devez appeler os.path.realpath sur __file__ , de sorte que lorsque __file__ est un nom de fichier sans le chemin vous obtenez toujours le chemin dir:

import os
print(os.path.dirname(os.path.realpath(__file__)))
574
répondu Czarek Tomczak 2016-11-12 08:07:54

j'utilise:

import os
import sys

def get_script_path():
    return os.path.dirname(os.path.realpath(sys.argv[0]))

comme le souligne aiham dans un commentaire, vous pouvez définir cette fonction dans un module et l'utiliser dans différents scripts.

113
répondu neuro 2016-10-09 22:38:29

Essayer sys.path[0] .

pour citer les docs Python:

Comme initialisé au démarrage du programme, le premier élément de cette liste, path[0] , est le répertoire contenant le script qui a été utilisé pour invoquer l'interpréteur Python. Si le répertoire de script n'est pas disponible (par exemple si l'interpréteur est invoqué de manière interactive ou si le script est lu à partir d'une entrée standard), path[0] est la chaîne vide, qui dirige Python vers rechercher des modules dans le répertoire courant en premier. Notez que le répertoire script est inséré avant les entrées insérées à la suite de PYTHONPATH .

Source: https://docs.python.org/library/sys.html#sys.path

112
répondu RED MONKEY 2016-10-09 22:39:42

ce code:

import os
dn = os.path.dirname(os.path.realpath(__file__))

définit" dn " au nom du répertoire contenant le script en cours d'exécution. Ce code:

fn = os.path.join(dn,"vcb.init")
fp = open(fn,"r")

définit" fn "en" script_dir/vcb.init" (d'une manière indépendante de plate-forme) et ouvre ce fichier à lire par le script en cours d'exécution.

notez que "the currently executing script" est quelque peu ambigu. Si votre programme entier se compose de 1 script, alors c'est le exécute actuellement script et le " sys.path[0] " la solution fonctionne très bien. Mais si votre application se compose de script A, qui importe un paquet " P "et appelle alors script" B", alors" P. B " est en cours d'exécution. Si vous avez besoin d'obtenir le répertoire contenant "P. B", vous voulez la solution " os.path.realpath(__file__) ".

__file__ "donne simplement le nom du script (haut de la pile) actuellement en cours d'exécution:" X. py". Ce n'est pas le cas. donner aucune information de chemin. C'est le "os".chemin.realpath" appel que le réel travail.

15
répondu Al Cramer 2012-05-27 01:59:25
import os,sys
# Store current working directory
pwd = os.path.dirname(__file__)
# Append current directory to the python path
sys.path.append(pwd)
12
répondu jbcurtin 2011-02-09 10:35:53
import os
script_dir = os.path.dirname(os.path.realpath(__file__)) + os.sep
6
répondu beoliver 2012-02-02 22:42:03

cela a fonctionné pour moi (et je l'ai trouvé via le cette question de débordement de Stack )

os.path.realpath(__file__)
5
répondu Dan R 2017-05-23 10:31:37

voilà ce que j'ai fini par dire. Cela fonctionne pour moi, si je importer mon script dans l'interpréteur, et aussi si je exécuter un script:

import os
import sys

# Returns the directory the current script (or interpreter) is running in
def get_script_directory():
    path = os.path.realpath(sys.argv[0])
    if os.path.isdir(path):
        return path
    else:
        return os.path.dirname(path)
2
répondu mpontillo 2014-08-13 17:57:50

C'est un assez vieux thread mais j'ai eu ce problème lorsque vous tentez d'enregistrer des fichiers dans le répertoire courant le script lors de l'exécution d'un script python à partir d'une tâche cron. getcwd() et beaucoup d'autre chemin de votre répertoire d'accueil.

pour obtenir un chemin absolu vers le script que j'ai utilisé""

directory = os.path.abspath(os.path.dirname(__file__))

2
répondu James 2015-09-19 12:17:35

Utiliser os.path.abspath('')

1
répondu Jonathan 2011-02-08 16:06:46

essayez ceci:

def get_script_path(for_file = None):
    path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something'))
    return path if not for_file else os.path.join(path, for_file)
0
répondu Davious 2014-09-20 15:10:05
import os
exec_filepath = os.path.realpath(__file__)
exec_dirpath = exec_filepath[0:len(exec_filepath)-len(os.path.basename(__file__))]
-1
répondu Stan 2011-11-22 16:47:42