2016-02-27 46 views
0

執行test.py/tmp如果我改變當前的工作目錄,爲什麼__file__變成無效路徑?

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

+0

由於'__file__'在你的情況下是相對的,因爲它與你在命令行中傳遞給'python'的*完全相同*。 'os.path.abspath()'在這種情況下別無選擇,只能根據當前工作目錄進行設置。 –

回答

3

取決於你如何調用python腳本,__file__可以是絕對或相對路徑(例如python /tmp/test.py對於前者,cd /tmp; python test.py後者)。

因此,如果__file__是相對的,os.path.abspath將使用當前工作目錄作爲基礎目錄。

易於通過將print __file__添加到您的測試腳本來證明。

+0

謝謝。那麼,當你從安裝了pip的腳本引用「--file--」時會發生什麼?我認爲這是安裝腳本的絕對路徑。 – Cory

+0

安裝腳本的方式並不重要,只是如何調用腳本。 – isedev

+0

我想我是問我是否正在運行一個安裝了Python應用程序的pip,它是通過絕對路徑還是相對路徑調用的。所有我在命令行中輸入的腳本名稱。 – Cory

相關問題