Potrebbe sembrare una domanda da principiante, ma non lo è. Alcuni approcci comuni non funzionano in tutti i casi:
sys.argv [0]
Questo significa usare path = os.path.abspath(os.path.dirname(sys.argv[0]))
, ma non funziona se stai eseguendo un altro script Python in un'altra directory, e questo può accadere nella vita reale.
__file__
Questo significa usare path = os.path.abspath(os.path.dirname(__file__))
, ma ho scoperto che non funziona:
py2exe
non ha un__file__
attributo, ma esiste una soluzione alternativa- Quando si esegue da IDLE con
execute()
non esiste alcun__file__
attributo - OS X 10.6 dove ottengo
NameError: global name '__file__' is not defined
Domande correlate con risposte incomplete:
- Python: trova il percorso del file in esecuzione
- Il percorso del file corrente dipende da come eseguo il programma
- Come conoscere il percorso dello script in esecuzione in Python?
- Cambia la directory nella directory di uno script Python
Sto cercando soluzione generica , che funzioni in tutti i casi d'uso sopra indicati.
Aggiornare
Ecco il risultato di una prova:
Output di python a.py (su Windows)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
albero
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
utilizzo del file e questo non è all'interno dell'IDLE. Pensa che__file__
sia definito solo all'interno dei moduli.