Python:怎样获取当前运行脚本的文件路径

Lasted 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