这个问题在这里已有答案:
请考虑以下Python代码:
import os
print os.getcwd()
我使用 os.getcwd()
来get the script file's directory location . 当我从命令行运行脚本时它给了我正确的路径,而当我从Django视图中的代码运行的脚本运行它时,它打印 /
.
如何从Django视图运行的脚本中获取脚本的路径?
UPDATE:
总结到目前为止的答案 - os.getcwd()
和 os.path.abspath()
都给出了当前的工作目录,该目录可能是也可能不是脚本所在的目录 . 在我的Web主机设置中, __file__
仅提供没有路径的文件名 .
Python中是否有任何方法(总是)能够接收脚本所在的路径?
12 回答
您需要在
__file__
上调用os.path.realpath
,这样当__file__
是没有路径的文件名时,您仍然可以获得目录路径:试试
sys.path[0]
.引用Python文档:
资料来源:https://docs.python.org/library/sys.html#sys.path
我用:
正如aiham在评论中指出的那样,您可以在模块中定义此函数并在不同的脚本中使用它 .
这段代码:
将“dn”设置为包含当前正在执行的脚本的目录的名称 . 这段代码:
将“fn”设置为“script_dir / vcb.init”(以独立于平台的方式)并打开该文件以供当前正在执行的脚本读取 .
请注意"the currently executing script"有点含糊不清 . 如果您的整个程序包含1个脚本,那么这是当前正在执行的脚本,并且"sys.path[0]"解决方案正常工作 . 但是,如果您的应用程序包含脚本A,它导入一些包"P"然后调用脚本"B",则"P.B"当前正在执行 . 如果需要获取包含"P.B"的目录,则需要“
os.path.realpath(__file__)
”解决方案 .“
__file__
" just gives the name of the currently executing (top-of-stack) script: " x.py ". It doesn't give any path info. It's the " os.path.realpath”调用可以完成真正的工作 .这对我有用(我通过this stackoverflow question找到了它)
这就是我最终的结果 . 如果我在解释器中导入脚本,并且如果我将其作为脚本执行,这对我有用:
这是一个非常古老的线程,但是当我尝试将文件保存到脚本所在的当前目录中时,我遇到了这个问题,从cron作业运行python脚本 . getcwd()和很多其他路径出现在您的主目录中 .
获得我使用的脚本的绝对路径
directory = os.path.abspath(os.path.dirname(__file__))
使用
os.path.abspath('')
试试这个: