2015-01-29 1 views
1

Я использую Django 1.7 поверх Python 2.7 и заметил странное поведение на моем рабочем хосте (Webfaction) по сравнению с машиной разработки (mac os x).Текущий каталог (os.getcwd) из Django определен как?

На моей машине Дев, когда я получаю текущую рабочую директорию через CMDS

import os 
dirspot = os.getcwd() 
print dirspot 

я получаю местоположение manage.py исполняемого файла. Когда я делаю это на машине хозяина (webfaction), я получаю diff-ответ в зависимости от того, запущен ли сайт Django, а также с помощью оболочки Django.

Так с моим проектом (и manage.py), расположенного по адресу:

/home/ross/webapps/djangoarea/myproj 

Запуск

python manage.py shell 

то выше os.getcwd() Я получаю

/home/ross/webapps/djangoarea/myproj 

Но если я поместил ту же команду в view.py и запустил свой проект, я получаю

/home/ross/ 

Я предполагаю, что это связано с apache2 и wsgi, выполняющим django, а не с manage.py, вызывающим его. Кто-нибудь знает, как заставить это быть последовательным?

Заранее спасибо, Росс.

ответ

4

Не уверен, что именно вы пытаетесь сделать, но, как вы находите, os.getcwd() не имеет ничего общего с местами файлов или сценариев, это связано с тем местом, где вы выполняете скрипт. Это было бы ненадежным по ряду причин: возможно, на главной машине ваши веб-процессы работают как совершенно другой пользователь, чем владелец скриптов. Если вы хотите получить что-то связанное с вашими файлами, вы, вероятно, хотите использовать os.path.abspath(os.path.dirname(__file__)) или os.path.realpath(path)

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

+0

Thx за предложение. В Django «script» - это исполняемый файл manage.py, поэтому я думал, что там должен быть последовательный результат, указывающий его местоположение. Тем не менее, никто не прозревает по абспуту и ​​реальной траектории, и это выглядит хорошо, поэтому используется так, что хорошо работает. Интересно, что в оболочке manage.py нужно указать ссылку на файл подчеркивания или он не будет работать. (не могу набрать это здесь, я вижу, поскольку символы подчеркивания удаляются) :) – RossGK