如何获取运行中的Python脚本路径?
我的script.py脚本使用相对路径创建一个临时文件。
当我这样运行它时:
python script.py
它的表现是我预期的那样。
但是当我这样运行时:
python /path/to/script.py
它就不工作了。
问题是我不知道它会在什么路径下运行。我该如何获取脚本文件夹的绝对路径(也就是“/path/to”),这样临时文件就可以在和脚本相同的目录下创建呢?
下面这种方法怎么样?
os.path.abspath(os.path.dirname(__file__))
3 个回答
你可以使用 os.getcwd() 这个方法来查看你现在的工作目录。
这个方法会返回一个字符串,表示当前的工作目录。
适用系统:Unix 和 Windows。
你还可以使用 os.chdir(path) 这个方法来改变你当前的工作目录。
这个方法会把当前的工作目录改成你指定的路径。
适用系统:Unix 和 Windows。
目前的两个回答都反映了你问题的模糊性。
当你运行 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__)
之类的方式(如果你希望在脚本作为模块导入时也有这样的行为,而不仅仅是在作为主脚本运行时,这个方法是必要的)。
根据《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)