import os
print __file__
print os.path.dirname(__file__)
os.chdir('/tmp')
print __file__ # unchanged, of course
print os.path.dirname(__file__) # now broken
У меня есть эта проблема выше, когда на dirname(__file__)
больше нельзя положиться после того, как os.chdir
было использовано в скрипте, после того, как загрузчик модуля установил __file__
.
Каков обычный механизм для решения этой проблемы, при условии, что вы, возможно, не знаете, где / когда / как os.chdir
могли быть вызваны ранее?
edit: iнадеюсь, что этот второй пример может лучше прояснить мою проблему
import os
old_dir = os.getcwd()
print os.path.abspath(__file__)
os.chdir('/tmp')
print os.path.abspath(__file__)
os.chdir(old_dir)
вывод выглядит так:
wim@wim-acer:~$ python --version
Python 2.7.1+
wim@wim-acer:~$ pwd
/home/wim
wim@wim-acer:~$ python /home/wim/spam.py
/home/wim/spam.py
/home/wim/spam.py
wim@wim-acer:~$ python ./spam.py
/home/wim/spam.py
/tmp/spam.py