Замена на месте из ConfigParser
-
08-07-2019 - |
Вопрос
У меня очень сложная ситуация (по моим меркам).У меня есть сценарий, которому нужно прочитать имя переменной сценария из КонфигПарсер.Например, мне нужно прочитать
self.post.id
из файла .cfg и используйте его как переменную в скрипте.Как мне этого добиться?
Полагаю, я был неясен в своем вопросе.Файл .cfg выглядит примерно так:
[head]
test: me
some variable : self.post.id
Этот self.post.id должен быть заменен во время выполнения, принимая значения из сценария.
Решение
тест.ini:
[head]
var: self.post.id
питон:
import ConfigParser
class Test:
def __init__(self):
self.post = TestPost(5)
def getPost(self):
config = ConfigParser.ConfigParser()
config.read('/path/to/test.ini')
newvar = config.get('head', 'var')
print eval(newvar)
class TestPost:
def __init__(self, id):
self.id = id
test = Test()
test.getPost() # prints 5
Другие советы
Это немного глупо.
У вас есть динамический язык, распространяемый в виде исходного кода.
Вы пытаетесь внести изменения в источник. Что легко читается, простой текст Python.
Почему бы просто не изменить исходный код Python и не перестать возиться с файлом конфигурации?
Гораздо проще иметь такой блок кода
# Change this for some reason or another
x = self.post.id # Standard Configuration
# x = self.post.somethingElse # Another Configuration
# x = self.post.yetAnotherCase # A third configuration
изменить это так же сложно, как изменить файл конфигурации. А ваша программа на Python проще и понятнее.