<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>
X-Sender: [EMAIL PROTECTED]
Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Mon, 30 Jun
        2008 19:00:39 +0200
User-Agent: RoundCube Webmail/0.1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit



On Mon, 30 Jun 2008 18:26:21 +0200, Alessandro Dentella <[EMAIL PROTECTED]>
wrote:
>> > 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.
>> 
>> Il problema e' che usi un dizionario per ambiente globale che pero' poi
>> butti via.
>> 
>> Il codice seguente funziona come ci si aspetta:
>> 
>> In [1]: ENV = {}
>> In [3]: execfile('plugin_A.py', ENV)
>> In [5]: a = ENV['A']()
>> In [6]: a.test()
> 
> 
> certo ma a quel punto ogni variabile viene importata nel namespace del
> chiamante e -proprio per dei plugin che possono essre fatti da terze
> parti-
> non so quanto sia opportuno. Chi mi assicura che non ridefinisca nomi di
> variabili che ho in uso?

A me non sembra che il global namespace del chiamante venga inquinato:

    In [1]: ENV = {}

    In [2]: execfile('plugin_A.py', ENV)

    In [3]: a = ENV['A']()

    In [4]: a.test()
    [ ...roba... ]

    In [5]: sys
   
---------------------------------------------------------------------------
    <type 'exceptions.NameError'>             Traceback (most recent call
last)

    /home/piro/py/<ipython console> in <module>()

    <type 'exceptions.NameError'>: name 'sys' is not defined

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a