如何找到脚本的目录?
考虑以下这段Python代码:
import os
print os.getcwd()
我使用 os.getcwd()
来 获取脚本文件的目录位置。当我从命令行运行这个脚本时,它能给我正确的路径,但当我从Django视图中运行这个脚本时,它却打印出 /
。
我该如何在Django视图中运行的脚本里获取脚本的路径呢?
更新:
总结一下到目前为止的回答 - os.getcwd()
和 os.path.abspath()
都能给出当前的工作目录,但这个目录可能并不是脚本所在的目录。在我的网络主机设置中,__file__
只返回文件名,而没有路径。
难道在Python中没有办法(总是)获取脚本所在的路径吗?
12 个回答
159
我使用:
import os
import sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
正如aihama在评论中提到的,你可以在一个模块里定义这个函数,然后在不同的脚本中使用它。
211
试试 sys.path[0]
。
引用一下Python文档的内容:
在程序启动时,这个列表的第一个项目
path[0]
是包含用来启动Python解释器的脚本的目录。如果脚本目录不可用(比如说在交互模式下启动解释器,或者脚本是从标准输入读取的),那么path[0]
就是一个空字符串,这样Python会优先在当前目录中查找模块。注意,脚本目录会被放在PYTHONPATH
变量所指定的路径之前。
1086
你需要在 __file__
上调用 os.path.realpath
,这样当 __file__
只是一个文件名而没有路径时,你仍然可以得到它所在的目录路径:
import os
print(os.path.dirname(os.path.realpath(__file__)))