Seite 1 von 1

built_in compile und Funktionen/Klassen/Module

Verfasst: Donnerstag 20. April 2006, 14:12
von hiasl
Hallo,

mit compile kann man Zeichenketten kompilieren und mittels exec/eval ausführen. Meine Frage ist, ob das auch mit Funktionen, Klassen oder Module geht.

Beispiel:
txt = """
def a():
print 1
"""
func = compile(txt, '/tmp/comp.err', 'exec')

Zwar kann ich ein exec(func) oder auch eval(func) ausführen, aber es passiert nichts. ein exec.(func.a()) scheitert.
Wie kann ich Zeichenketten kompilieren ohne sie als Datei speichern und nachträglich importieren zu müssen?

Bin für jeden Tipp dankbar.

Ciao
Matthias

Verfasst: Donnerstag 20. April 2006, 15:25
von mitsuhiko

Code: Alles auswählen

>>> code = compile('''
... def test():
...     return "Hello World"''', 'test.py', 'exec')
>>> d = {}
>>> exec code in d
>>> d['test']()
'Hello World'
"test.py" ist nur ein virtueller dateiname, die wird nicht wirklich angelegt.

Verfasst: Donnerstag 20. April 2006, 15:41
von hiasl
Besten Dank!