2008-11-17 2 views
0

У меня очень сложная ситуация (по моим стандартам) в руке. У меня есть сценарий, который должен читать имя переменной скрипта от ConfigParser. Например, мне нужно прочитатьЗамена на месте от ConfigParser

self.post.id 

из файла .cfg и использовать его в качестве переменной в скрипте. Как мне это достичь?

Я полагаю, что я был неясен в моем запросе. .cfg файл выглядит примерно так:

[head] 
test: me 
some variable : self.post.id 

Этот self.post.id должен быть заменен на время выполнения, принимая значения из сценария.

+0

ah я вижу, я переработал код, поэтому с помощью eval вы можете захватить config var: self.post.id, и вы увидите, что он оценивается как 5 (поскольку мы устанавливаем self.post.id на быть в Test()) – Owen 2008-11-17 07:39:31

ответ

4

test.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 
+1

Итак, что происходит, когда «var» в конфигурационном файле «import shutil; shutil.rmtree ('/ home/user')« – 2008-11-17 15:16:31

+0

, тогда у нас есть проблема! – Owen 2008-11-17 18:00:50

1

Это немного глупо.

У вас есть динамический язык, распространяемый в исходной форме.

Вы пытаетесь внести изменения в исходный код. Это простой для чтения, простой текстовый 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 проще и понятнее.

Смежные вопросы