On Mon, Jun 30, 2008 at 03:41:39PM +0200, Leonardo wrote:
> Alla fine ho risolto con execfile, è incredibile: esegue un file come se
> fosse all'interno del file chiamante, passandogli tutte le variabile, le
> funzioni, e le classi esistenti.
> L'unica cosa è che adesso un modulo è così ad esempio:
>
> file rejoin.py:
>
> #! /usr/bin/python
> # -*- coding: UTF-8 -*-
> user, mode, chan, request = self.get_params(server_response)
> if self.Bot.nick in server_response:
> print "Sono stato kikkato!"
> self.Bot.join(chan)
> self.send(self.response, chan)
>
> E fa un po' senso vederlo così, con praticamente tutte le variabili e
> funzioni non dichiarate nè passate come argomento eppure funzionanti.
> Ovvio che se lo lancio direttamente solleva decine di errori x
c'è un altro aspetto che non mi piace di execfile. Proprio il mese scorso
sono passato da execfile a __import__ in un set di test il cui principio è
uguale a quello dei plugin.
il "problema" è negli import. Supponi di avere un plugin così::
import sys
class A(object):
def test(self):
print sys.path
e di volerlo usare così
LOCS = {}
execfile('plugin_A.py', {}, LOCS)
a = LOCS['A']()
a.test()
ti verrà sollevato l'errore che perchè 'a' non vede __più__ il modulo sys.
E non mi pare una soluzione dire che assieme ad A importo tutto nel mio
programma principale.
Ovviamente funzionerebbe se facessi l'import direttamente nel metodo, ma io
lo consideravo troppo particolare e esposto ad errori.
sandro
*:-)
_______________________________________________
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python