如果我更改当前工作目录,为什么__file__会成为无效路径?

时间:2016-02-27 00:05:26

标签: python

test.py

执行/tmp
import os

print os.path.abspath(__file__)
os.chdir('/var')
print os.path.abspath(__file__)

输出:

/tmp/test.py
/var/test.py

我预计第二个输出为/tmp/test.py。这是一个错误还是预期的行为?有没有办法获得不受chdir影响的文件的实际位置?

我正在使用Python 2.7

1 个答案:

答案 0 :(得分:3)

根据您调用python脚本的方式,__file__可以是绝对路径或相对路径(例如前者为python /tmp/test.py,后者为cd /tmp; python test.py

因此,如果__file__是相对的,os.path.abspath将使用当前工作目录作为基本目录。

通过在测试脚本中添加print __file__来轻松证明。