如何获取运行中的Python脚本路径?

4 投票
3 回答
10653 浏览
提问于 2025-04-15 19:15

我的script.py脚本使用相对路径创建一个临时文件。

当我这样运行它时:

python script.py

它的表现是我预期的那样。

但是当我这样运行时:

python /path/to/script.py

它就不工作了。

问题是我不知道它会在什么路径下运行。我该如何获取脚本文件夹的绝对路径(也就是“/path/to”),这样临时文件就可以在和脚本相同的目录下创建呢?

下面这种方法怎么样?

os.path.abspath(os.path.dirname(__file__))

3 个回答

0

你可以使用 os.getcwd() 这个方法来查看你现在的工作目录。

这个方法会返回一个字符串,表示当前的工作目录。
适用系统:Unix 和 Windows。

你还可以使用 os.chdir(path) 这个方法来改变你当前的工作目录。

这个方法会把当前的工作目录改成你指定的路径。
适用系统:Unix 和 Windows。

9

目前的两个回答都反映了你问题的模糊性。

当你运行 python /path/to/script.py 时,你希望临时文件放在哪里?是在当前目录下(比如 ./tempfile.txt),还是在 /path/to/tempfile.txt 这个路径下?

如果你想放在当前目录,你可以直接使用相对路径(或者出于一些特殊的目的,可以用 os.getcwd 获取当前目录的绝对路径,就像 @Desintegr 提到的那样)。

如果你想放在后者的路径下,你可以通过 sys.argv[0] 来了解脚本是怎么被调用的,正如 @Jonathan 所建议的,然后用 os.path 中的函数来处理这个路径(当然,如果你想放在当前目录,也可以对 os.getcwd 返回的结果使用这些函数),或者使用 os.path.dirname(__file__) 之类的方式(如果你希望在脚本作为模块导入时也有这样的行为,而不仅仅是在作为主脚本运行时,这个方法是必要的)。

12

根据《Dive Into Python》这本书的内容:

import sys, os

print 'sys.argv[0] =', sys.argv[0]             1
pathname = os.path.dirname(sys.argv[0])        2
print 'path =', pathname
print 'full path =', os.path.abspath(pathname)

撰写回答