سؤال

ولدي الوضع صعب جدا (للمعايير بلدي) في متناول اليد. لدي النصي الذي يحتاج إلى قراءة السيناريو اسم المتغير من 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

وانها مجرد معقدة لتغيير هذا كما هو لتغيير ملف التكوين. وبرنامج بيثون الخاص بك هو أبسط وأكثر وضوحا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top