Maison >développement back-end >Tutoriel Python >Comment pouvez-vous déterminer de manière fiable le chemin du fichier d'exécution en Python ?

Comment pouvez-vous déterminer de manière fiable le chemin du fichier d'exécution en Python ?

DDD
DDDoriginal
2024-10-25 09:14:29970parcourir

How Can You Reliably Determine the Execution File's Path in Python?

Détermination du chemin du fichier d'exécution en Python

Introduction

Identifier le chemin d'accès au script Python en cours d'exécution est un aspect crucial pour diverses applications. Cependant, trouver une approche « universelle » qui fonctionne dans différents scénarios peut s’avérer difficile. Cet article explore plusieurs méthodes et aborde les limitations qui leur sont associées, présentant finalement une solution complète.

Limitations des méthodes traditionnelles

  • path = os.path.abspath(os. path.dirname(sys.argv[0])) : Cette approche échoue lorsque le script est exécuté à partir d'un autre script dans un répertoire différent via des méthodes telles que execfile.
  • path = os.path.abspath(os.path.dirname(__file__)) : Cette méthode peut ne pas fonctionner dans les cas où :

    • file l'attribut n'est pas présent (par ex. , exécution Py2exe)
    • Le code est exécuté depuis IDLE à l'aide d'execute()
    • le fichier n'est pas défini (par exemple, Mac OS X v10.6)

Solution complète

Pour obtenir le chemin du fichier en cours d'exécution quel que soit le contexte d'exécution, une combinaison de fonctions des modules inspect et os peut être utilisée :

from inspect import getsourcefile
from os.path import abspath

path = abspath(getsourcefile(lambda:0))

Cette solution fournit une approche cohérente qui récupère le chemin du fichier source dans divers scénarios, notamment :

  • Exécution directe du script principal
  • Exécution à partir d'un autre script
  • Exécution au sein d'une fonction
  • Exécution au sein d'un interpréteur (par exemple, IDLE)

Exemple de test

Considérant la structure de répertoires suivante :

C:.
|   a.py
\---subdir
        b.py

Et le code dans a.py :

#! /usr/bin/env python
import os, sys

print "a.py: os.getcwd()=", os.getcwd()
print

execfile("subdir/b.py")

Et le code dans subdir/b.py :

#! /usr/bin/env python
import os, sys

print "b.py: os.getcwd()=", os.getcwd()
print

La sortie de python a.py est :

a.py: os.getcwd()= C:\
b.py: os.getcwd()= C:\zzz

Cela démontre que os.getcwd() reflète le répertoire de travail du contexte d'exécution, qui peut différer de l'emplacement du script en cours d'exécution. En revanche, la solution proposée (abspath(getsourcefile(lambda:0))) renvoie systématiquement le chemin du fichier source du script, quel que soit le contexte d'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn