[Python-de] Bei der Instantiierung einer Funktion Code ausführen
Diez B. Roggisch
deets at web.de
Sa Dez 8 16:35:35 CET 2012
Ich glaube dem OP geht's weniger um exec. Sondern darum, ob Funktionsdefinitionen weitere Seiteneffekte haben können, die zur ausführung von Code führen.
Ich denke nicht - mit der Ausnahme von Dekoratoren natürlich.
Diez
Mobile Mail. Excuse brevity.
Am 08.12.2012 um 11:35 schrieb Mike Müller <mmueller at python-academy.de>:
> Hallo Albert,
>
> Am 08.12.12 10:40, schrieb Albert Hermeling:
>> Guten Morgen,
>>
>> ich Beschäftige mich gerade mit mit den Internas von Python Funktionen. Beim
>> Nachdenken über Funktionen, habe ich mich gefragt, ob man Code beim erzeugen
>> einer Funktion unbemerkt ausführen kann. Klinkt jetzt ein bisschen verworren,
>> deshalb hier ein Beispiel:
>>
>> s = """
>> def printer():
>> print("Böse Funktion: ", dir())
>> """
>>
>> Diese Funktion liegt als String vor und wenn ich jetzt aus dem String mit exec
>> eine Funktion erzeuge (Instantiiere (?)) habe ich eine Funktion printer im
>> aktuellen Namensraum. So lange ich diese Funktion nicht aufrufe, passiert
>> nichts, rufe ich Sie auf passiert was. Ist es jetzt eigentlich möglich, das bei
>> der Erzeugung (exec(s) genau jetzt), also noch vor dem Aufrufen der selbigen,
>> Schadcode ausgeführt werden kann?
>
> Die Funktion wird erst beim Aufruf ausgeführt. Kannst aber garantieren, dass
> nicht auch außerhalb der Funktion Anweisungen kommen? Zum Beispiel:
>
> s = """
> print('haha')
> def printer():
> print("Böse Funktion: ", dir())
> """
>
> Generell würde ich `exec` nur in sehr seltenen Fällen nehmen. Es gibt fast
> immer eine andere, oft bessere, Lösung. Kannst du mal kurz erklären warum
> die Funktion als String vorliegt und was genau passieren soll. Dann bietet
> sich vielleicht eine andere Lösung an.
>
> Viele Grüße
> Mike
>
> _______________________________________________
> python-de maillist - python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de
>
Mehr Informationen über die Mailingliste python-de