Django内的当前目录(os.getcwd)确定如何?

时间:2015-01-29 15:20:13

标签: python django webfaction

我使用Django 1.7而不是Python 2.7,并注意到我的生产主机(Webfaction)与开发机器(mac os x)之间存在奇怪的行为。

在我的开发机器上,当我通过cmds获取当前工作目录时

import os
dirspot = os.getcwd()
print dirspot

我获取了manage.py可执行文件的位置。 当我在主机(webfaction)机器上执行此操作时,我会得到差异响应,具体取决于Django站点是否正在运行,而不是使用Django shell。

所以我的项目(和manage.py)位于:

/home/ross/webapps/djangoarea/myproj

正在运行

python manage.py shell

然后上面的os.getcwd()我得到

/home/ross/webapps/djangoarea/myproj

但是,如果我将相同的命令放入views.py并运行我的项目,我会得到

/home/ross/

我猜测它可能与运行django的apache2和wsgi有关,而不是与manage.py调用它有关。有谁知道如何使这一点保持一致?

提前致谢, 罗斯。

2 个答案:

答案 0 :(得分:6)

不确定您要做什么,但正如您所发现的,os.getcwd()与文件或脚本的位置没有任何关系,它与您执行脚本的位置有关。由于多种原因,这不可靠 - 例如,在主机上,您的Web进程作为与脚本所有者完全不同的用户运行。如果您想获取与文件相关的内容,可能需要使用os.path.abspath(os.path.dirname(__file__))os.path.realpath(path)

https://docs.python.org/3.3/library/os.path.html#os.path.realpath

答案 1 :(得分:0)

以防万一有人觉得它有用。 您可以查看您的工作目录,或使用 request.django 直接在 django 中打印工作。这种行为似乎适用于休息框架的请求,尽管我不确定它是否适用于常规 django 请求。

def some_view(self, request, *args, **kwargs):
    request.META.get('pwd')

希望对大家有用