Логотип blackzero
Админка rss

Злоебучие пути в змие

пути Python
Все началось с того, что моя cms работает как из консоли, так и из веба. И еще подключает скрипты по не-pytonic методу.
Вот вам пример - пишете вы скрипт, который чойто делает с файлами, например сохраняет дамп объекта и пишет в файл. Но когда вы, сцуко, запускаете его разными путями для чтения его, змий ведет себя как ошалевший пидорас!


Есть файл который читает этот файл, лежит он по пути
C:/denwer/home/site/www/run.py
Вот его код:


здесь мы видим, что нужно юзнуть файл в папке site. т.е. на уровень выше
А теперь запустим его несколькими способами
1. Запустим через SHIFT+ПКМ - окно команд - run.py

2. Откроем через абсолютный путь win-r-cmd-вставить "C:\DENWER\home\site\www\run.py"

3. Ебанем через cgi denwer'а site/run.py это тоже самое что run.php

У вас сразу мысль, что за красноглазый пидор смотрит на вас в пункте 2? Это все злоебучий путь запуска.
Мы выполняем его относительно C:\Users\Пользователь\ во втором случае
В 1 и 3 случае - C:\DENWER\home\site\www\

Это нужно учитывать, ибо когда вы будете подключать модуль, который хочет юзнуть что-то лежащее в его папке, это будет выглядеть так:
Основной скрипт лежит в 

C:\DENWER\home\site\www\run.py

другой скрипт лежит в 

C:\DENWER\home\site\www\admin\__init__.py


В run.py только одна строчка - import admin подключает данный модуль, а по пути 

C:\DENWER\home\site\www\admin\file.data 

лежи файл с паролями, который нужен только для модуля admin
Запускаем относительно admin

Работает, а если запустить через run.py?

Ну вы поняли в чем ошибка??? Это может очень таки сильно заебать мозг, если только начал че-то делать. Пока выход нашел только один.

os.path.abspath(os.path.dirname(__file__)))

Возвращает путь, относительно выполнения скрипта. В коде выглядит примерно так:

Его мы можем запускать самыми разными способами, и через win-r и по разному

Кстати тут такая штука с относительными путями:
/ - от корня корень соответсвенно зависит от настроек сервера
./ от текущей директории, то есть если файл лежит в той же директории что и файл который его использует
../ на уровень выше

Для того, чтобы python скрипт работал при абсолютном пути, нужно забубенить такую фишку
os.chdir(os.path.abspath(os.path.dirname(__file__)));


Комментарии

Добавить комент

Работают BB коды: b, i, u, color, code, quote, url, img, size, list
Имя


Яндекс.Метрика