Это может показаться новичком, но это не так. Некоторые общие подходы не работают во всех случаях:
sys.argv [0]
Это означает использование path = os.path.abspath(os.path.dirname(sys.argv[0]))
, но это не работает, если вы работаете с другим Python script в другом каталоге, и это может произойти в реальной жизни.
__ __ файл
Это означает использование path = os.path.abspath(os.path.dirname(__file__))
, но я обнаружил, что это не работает:
-
py2exe
не имеет атрибута__file__
, но существует обходной путь - Когда вы запускаете из IDLE с помощью
execute()
атрибута__file__
- OS X 10.6, где я получаю
NameError: global name '__file__' is not defined
Связанные вопросы с неполными ответами:
- Python - найти путь к запущенному файлу
- Путь к текущему файлу зависит от того, как я выполняю программу
- Как узнать путь к запуску script в Python?
- Сменить каталог в каталог Python script
Я ищу общее решение, которое будет работать во всех вышеприведенных случаях использования.
Update
Вот результат теста:
Вывод python a.py(в 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")
подкаталог /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
дерево
C:.
| a.py
\---subdir
b.py