Python:怎樣獲取當前運行腳本的文件路徑

最近更新時間 2020-12-03 12:16:01

有時在項目中需要獲取當前腳本的路徑。比如需要查找腳本同級目錄的另外的文件,如果項目中使用相對文件很容易在定時任務中出現問題,因為開發時的工作目錄和定時腳本執行的工作目錄可能不同導致查詢不到文件。

本篇文章主要講解怎樣在 Python 中獲取腳本的相對路徑和絕對路徑。

注:需要區分 Python 的當前工作目錄和腳本的路徑,Python 的工作目錄並不是腳本的位置,兩者有時候可能是同一個值。

使用 __file__

___file__ 表示當前腳本的路徑,返回的是相對路徑,如果需要絕對路徑需使用 realpath 方法。使用 python file.py 命令運行下面的腳本。

import os

# 文件路徑
print(__file__)

# 絕對路徑
script_file = os.path.realpath(__file__)
print(script_file)

# 獲取目錄
dirname = os.path.dirname(script_file)
print(dirname)
file.py
/data/python/file.py
/data/python

上面的方法如果使用 python /data/file.py 命令運行,__file__ 的值為 /data/file.py。在使用中儘量避免直接使用 __file__ 需要跟 realpath() 方法一起使用獲取絕對路徑。

使用 sys.argv 參數

可以使用 sys.argv[0] 獲取入口腳本的路徑,跟 __file__ 關鍵字類似,不同命令結果可能不一樣,需要儘量使用絕對路徑。

import sys, os

# 文件路徑
print(sys.argv[0])

# 絕對路徑
script_file = os.path.realpath(sys.argv[0])
print(script_file)

# 獲取目錄
dirname = os.path.dirname(script_file)
print(dirname)
file.py
/data/python/file.py
/data/python
rss_feed