استبدال Inplace من ConfigParser
-
08-07-2019 - |
سؤال
ولدي الوضع صعب جدا (للمعايير بلدي) في متناول اليد. لدي النصي الذي يحتاج إلى قراءة السيناريو اسم المتغير من ConfigParser . على سبيل المثال، ولست بحاجة لقراءة
self.post.id
ومن ملف .cfg واستخدامه بمثابة متغير في البرنامج النصي. كيف يمكنني تحقيق ذلك؟
وأعتقد أنني لم يتضح في الاستعلام بلدي. الملف .cfg يبدو شيئا مثل:
[head]
test: me
some variable : self.post.id
وهذا self.post.id سيتم استبدالها في وقت التشغيل، مع القيم من البرنامج النصي.
المحلول
و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
نصائح أخرى
وهذا هو سخيف بعض الشيء.
ولديك لغة ديناميكية، وزعت في شكل مصدر.
وأنت تحاول أن تجعل ما يرقى إلى تغيير في المصدر. وهي سهلة القراءة، عادي بيثون النص.
لماذا لا مجرد تغيير المصدر بايثون ووقف العبث حول مع ملف التكوين؟
وانها أسهل كثيرا أن يكون كتلة من التعليمات البرمجية مثل هذا
# 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
وانها مجرد معقدة لتغيير هذا كما هو لتغيير ملف التكوين. وبرنامج بيثون الخاص بك هو أبسط وأكثر وضوحا.