如何找到脚本的目录?

考虑下面的Python代码:

import os
print os.getcwd()

我使用os.getcwd()获取脚本文件的目录位置。当我从命令行运行脚本时,它会给我正确的路径,而当我从Django视图中代码运行的脚本运行它时,它会打印/

如何从Django视图运行的脚本中获取脚本的路径?

< p > # EYZ0 < br > 总结到目前为止的答案——os.getcwd()os.path.abspath()都给出了当前的工作目录,这个目录可能是脚本所在的目录,也可能不是。在我的web主机设置__file__只给出文件名而没有路径

在Python中没有任何方法(总是)能够接收脚本驻留的路径吗?

638239 次浏览

使用# EYZ0

import os,sys
# Store current working directory
pwd = os.path.dirname(__file__)
# Append current directory to the python path
sys.path.append(pwd)

我使用:

import os
import sys


def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))

正如aiham在评论中指出的那样,您可以在模块中定义这个函数,并在不同的脚本中使用它。

# EYZ0试试。

引用Python文档:

在程序启动时初始化后,该列表的第一项path[0]是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如交互式调用解释器或从标准输入读取脚本),path[0]是空字符串,它指示Python首先搜索当前目录中的模块。注意,脚本目录是在由于PYTHONPATH而插入的条目之前插入的。

来源:# EYZ0

这对我来说很有效(我通过这个stackoverflow问题找到了它)

os.path.realpath(__file__)
import os
exec_filepath = os.path.realpath(__file__)
exec_dirpath = exec_filepath[0:len(exec_filepath)-len(os.path.basename(__file__))]
import os
script_dir = os.path.dirname(os.path.realpath(__file__)) + os.sep

你需要在__file__上调用os.path.realpath,这样当__file__是一个没有路径的文件名时,你仍然可以得到dir路径:

import os
print(os.path.dirname(os.path.realpath(__file__)))

这段代码:

import os
dn = os.path.dirname(os.path.realpath(__file__))

将“dn”设置为包含当前执行脚本的目录的名称。这段代码:

fn = os.path.join(dn,"vcb.init")
fp = open(fn,"r")

将“fn”设置为“script_dir/vcb”。Init”(以平台独立的方式)并打开 当前正在执行的脚本要读取的文件

请注意,“当前执行的脚本”有些模糊。如果整个程序由1个脚本组成,那么这就是当前正在执行的脚本和“sys. exe”脚本。路径[0]“解决方案工作正常。但如果你的应用程序由脚本A组成,它导入某个包“P”,然后调用脚本“B”,那么“P.B”当前正在执行。如果需要获取包含“P.B”的目录,则需要“os.path.realpath(__file__)”解决方案。

"__file__"只是给出了当前正在执行的(堆栈顶部)脚本的名称:"x.py"。它不 给出任何路径信息。它是“os.path”。

这是一个相当老的线程,但当我试图将文件保存到脚本所在的当前目录时,从cron作业运行python脚本时,一直有这个问题。Getcwd()和许多其他路径会显示您的主目录。

来获取我使用的脚本的绝对路径

# EYZ0

这是我最后得到的结果。这适用于我,如果我导入我的脚本在解释器,也如果我执行它作为一个脚本:

import os
import sys


# Returns the directory the current script (or interpreter) is running in
def get_script_directory():
path = os.path.realpath(sys.argv[0])
if os.path.isdir(path):
return path
else:
return os.path.dirname(path)

试试这个:

def get_script_path(for_file = None):
path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something'))
return path if not for_file else os.path.join(path, for_file)