Sostituzione sul posto da ConfigParser
-
08-07-2019 - |
Domanda
Ho una situazione molto difficile (per i miei standard) in mano. Ho uno script che deve leggere il nome di una variabile di script da ConfigParser . Ad esempio, devo leggere
self.post.id
da un file .cfg e usalo come variabile nello script. Come posso raggiungere questo obiettivo?
Suppongo di non essere chiaro nella mia query. Il file .cfg è simile a:
[head]
test: me
some variable : self.post.id
Questo self.post.id deve essere sostituito in fase di esecuzione, prendendo i valori dallo script.
Soluzione
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
Altri suggerimenti
Questo è un po 'sciocco.
Hai un linguaggio dinamico, distribuito in forma sorgente.
Stai cercando di apportare ciò che equivale a una modifica alla fonte. Che è Python di facile lettura e in chiaro.
Perché non cambiare semplicemente l'origine Python e smettere di scherzare con un file di configurazione?
È molto più facile avere un blocco di codice come questo
# 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
è tanto complesso modificarlo quanto cambiare un file di configurazione. E il tuo programma Python è più semplice e chiaro.