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__
後。__file__和os.path模塊不能很好地播放?
解決此問題的常用機制是什麼?假設您可能不知道以前可能調用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)
輸出是這樣的:
[email protected]:~$ python --version
Python 2.7.1+
[email protected]:~$ pwd
/home/wim
[email protected]:~$ python /home/wim/spam.py
/home/wim/spam.py
/home/wim/spam.py
[email protected]:~$ python ./spam.py
/home/wim/spam.py
/tmp/spam.py
無法在Windows 7,Python 2.6.2上重現。目錄是否切換至關鍵位置,或者是否有任何目錄執行此操作?必須導入文件,還是可以單獨運行?你使用的是什麼Python版本?究竟是如何第二次「破」(有什麼不是預期的)? – Cameron
「解決此問題的常用機制是什麼?」?什麼?你爲什麼要'__file__'的絕對路徑?爲什麼你要等到你做了「不知道os.chdir以前被調用的地方/時間/地點」才能獲得絕對路徑? –
對不起,原因是在調試幫助函數中使用。我使用inspect模塊來獲得一堆其他信息,例如,我可以使用dbgp('i')'而不是亂丟''print i''代碼,並得到不同顏色的輸出行,例如' /abs/path/to_file.py:line_number我= repr(i)' – wim