Substitution sur place de ConfigParser
-
08-07-2019 - |
Question
J'ai une situation très délicate (pour mes normes) en main. J'ai un script qui doit lire un nom de variable de script à partir de ConfigParser . Par exemple, je dois lire
self.post.id
à partir d'un fichier .cfg et utilisez-le comme variable dans le script. Comment y parvenir?
Je suppose que ma question n'était pas claire. Le fichier .cfg ressemble à quelque chose comme:
[head]
test: me
some variable : self.post.id
Ce self.post.id doit être remplacé au moment de l'exécution, en prenant des valeurs du script.
La solution
test.ini:
[head]
var: self.post.id
python:
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
Autres conseils
C'est un peu idiot.
Vous avez un langage dynamique, distribué sous forme source.
Vous essayez d’apporter ce qui revient à changer la source. Ce qui est un texte simple en Python facile à lire.
Pourquoi ne pas simplement changer la source Python et arrêter de jouer avec un fichier de configuration?
Il est beaucoup plus facile d'avoir un bloc de code comme celui-ci
# 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
C’est aussi complexe de changer cela que de changer un fichier de configuration. Et votre programme Python est plus simple et plus clair.