Форум сайта python.su
Пространства для Вашего Я, коллеги!
У нас тут проект на джанге и мне нужно организовать с ним такие чисто системные действия, как деплой, бекап, старт-стоп, мониторинг… Одним словом – чисто системные вещи, которые проще писать на баше, чем на питоне.
Так как мне для этого нужны некоторые значения из конфига проекта, я написал такой скрипт:
#!/usr/bin/env python2.6
# coding: utf-8
u"""Вытягиваем из конфига значение интересующей нас переменной"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
import config
USAGE = """get_config_value.py [attr]"""
if __name__=="__main__":
if len(sys.argv) == 1:
for key in sorted(k for k in dir(config) if not k.startswith('__')):
print key
elif len(sys.argv) == 2:
try:
sys.stdout.write(str(getattr(config, sys.argv[1])) + '\n')
except AttributeError:
sys.stderr.write("Attribute is not exists.\n")
sys.exit(1)
elif len(sys.argv) > 2:
sys.stderr.write(USAGE)
sys.exit(1)
sys.exit(0)
. script_with_environ.bash
Офлайн
ZZZИ не должно было, порождаемый процесс копирует окружение из запускающего и установка в нем переменных на родительский не влияет.
А вот как мне сделать такое с питоним скриптом?
Я пробовал править из скрипта os.environ и вызывать его из баша, но это ни к чему не привело.
Офлайн
PooHЯ понимаю, но надежда, как говориться, умирает последней…
не должно было, порождаемый процесс копирует окружение из запускающего и установка в нем переменных на родительский не влияет.
PooHИз-за надобности специфичного экранирования, это довольно не тривиальная задача.
Может сформировать временный файлик с параметрами, а из баша его читать и устанавливать?
PooHЯ очень плохо знаю джангу. Ссылку не дашь?
А почему все же не пойти стандартным для джанги путем - написать свои команды?
Офлайн
Вот http://docs.djangoproject.com/en/1.2/howto/custom-management-commands/
А вот этот проект предлагает дополнительный набор команд http://code.google.com/p/django-command-extensions/
Офлайн
Ааа!.. Вот ты о чём!
Наверное бОльшую часть можно красиво на это положить… Например генерилку внешних конфигов (nginx, logrotate…). Спасибо за мысль.
Но всё равно основной вопрос остаётся, хотя и превратившись в академический.
Офлайн
А может buildout + djangorecipe? Пользуюсь им и очень доволен, деплой в пару консольных команд происходит.
Офлайн
А вызывать bash скрипт из питонового с предварительной установкой переменных окружения не проще?
Офлайн
poltergeistСлишком много всего. Начиная от DB (одним syncdb не отделаешься) и заканчивая генерацией конфига sphinxsearch… Я уж молчу про virtualenv, который сам по себе не часто с первого раза собирается… Но это и не так важно – у нас не тысяча мелких проектиков, а пара больших.
А может buildout + djangorecipe? Пользуюсь им и очень доволен, деплой в пару консольных команд происходит.
EdЯ думал об этом. Не красиво.
А вызывать bash скрипт из питонового с предварительной установкой переменных окружения не проще?
Офлайн