Включить .py-файл, все еще не разрушая cronjob (Python, новичок)? - PullRequest
3 голосов
/ 15 августа 2011

Я создаю сервис, в котором запущено несколько cronjobs, написанных на Python. Тем не менее, это мой первый Python-проект за всю историю, поэтому я все еще начинающий.

Что я сейчас делаю, так это то, что у меня есть соединение с базой данных для каждого файла, поэтому, если я захочу сменить хост, мне нужно будет просмотреть все файлы. Сейчас я изучаю похожий метод PHP- include() для Python, чтобы я мог включить некоторые общие вещи вместо вставки копий.

Кроме того, Python-файлы запускаются в cronjob, поэтому метод должен работать и в cronjobs:)

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

Если это просто пара настроек для одного подключения к базе данных, просто поместите его в модуль Python и импортируйте его во все ваши файлы. Зачем добавлять сложности, которые вам не нужны?

Если это сложнее, используйте ConfigParser, как предложено @AdamMatan.

# dbconfig.py
host = '127.0.0.1'
user = 'stack'
password = 'overflow'

# db.py

import dbconfig
print dbconfig.host
print dbconfig.user
print dbconfig.password
1 голос
/ 15 августа 2011

Используйте внешний файл конфигурации , с вашим подключением к базе данных (хост, имя, пароль, db, ...) и считайте файл конфигурации из скрипта Python.

Это облегчает внесение изменений (даже для непрограммистов) и хорошо соответствует принципу Single Choice .

Пример:

дБ.cfg

[db]
host=127.0.0.1
user=stack
password=overflow

db.py

import ConfigParser

config = ConfigParser.ConfigParser()
config.readfp(open('db.cfg'))

print config.get('db', 'host')

Результат выполнения:

127.0.0.1
0 голосов
/ 15 августа 2011

Если вам нужно позвонить __import__(), вы делаете это неправильно.

Вам нужно до рефакторинг ваш код, чтобы у вас больше не было подпрограмм подключения к базе данных, разбросанных по всей базе кода.Да, было бы еще лучше иметь эти данные в файле конфигурации (+1 @ Adam Matan ), но сначала вам нужно устранить дублирование.Это спасет вас от боли в долгосрочной перспективе.

...