我使用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调用它有关。有谁知道如何使这一点保持一致?
提前致谢, 罗斯。
答案 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')
希望对大家有用