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
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a