[英]__file__ and os.path module not playing nicely?
import os
print __file__
print os.path.dirname(__file__)
os.chdir('/tmp')
print __file__ # unchanged, of course
print os.path.dirname(__file__) # now broken
我上面有這個問題,在模塊加載程序設置__file__
之后,在腳本中使用了os.chdir
之后,就不再依賴dirname(__file__)
。
解決此問題的常用機制是什么,假設您可能不知道以前在哪里/何時/如何調用過os.chdir
?
編輯:我希望第二個例子可以更好地闡明我的問題
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
__file__
必須存在於sys.path
。
for dirname in sys.path:
if os.path.exists( os.path.join(dirname,__file__) ):
# The directory name for `__file__` was dirname
最后一個示例在__file__
名稱( ./xxx.py
)中具有相對路徑元素。 調用abspath
時,它將被擴展到當前目錄。
如果將此代碼放在模塊中,則不會有此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.