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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top