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

DDD
Libérer: 2024-10-25 09:14:29
original
893 Les gens l'ont consulté

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))
Copier après la connexion

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
Copier après la connexion

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")
Copier après la connexion

Et le code dans subdir/b.py :

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

print "b.py: os.getcwd()=", os.getcwd()
print
Copier après la connexion

La sortie de python a.py est :

a.py: os.getcwd()= C:\
b.py: os.getcwd()= C:\zzz
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!