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:
[EMAIL PROTECTED]
[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 18:02:18 +0200
User-Agent: RoundCube Webmail/0.1
Content-Type: text/plain; charset=UTF-8
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
Mi sembra di capire che tu fai execfile per sfruttare gli effetti secondari
delle istruzioni eseguite. Se posso, ti suggerisco di creare dei moduli
plugin che definiscano unicamente una funzione. Puoi caricare tutti i
plugin all'avvio del programma o ad un certo evento e poi usare le funzioni
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
Alessandro Dentella ha scritto:
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
Leonardo ha scritto:
Mi sembra di capire che tu fai execfile per sfruttare gli effetti secondari
delle istruzioni eseguite. Se posso, ti suggerisco di creare dei moduli
plugin che definiscano unicamente una funzione. Puoi caricare tutti i
plugin all'avvio del programma o ad un certo evento e
Quindi mi sarebbe d'aiuto un buon metodo per importare moduli a seconda
di una variabile, o altri modo per definire ed utilizzare funzioni in
files esterni al cuore del programma.
Grazie per le eventuali risposte :)
Se ho capito bene stai cercando la funzione __import__:
On Sun, 2008-06-29 at 18:24 +0100, Daniele Varrazzo wrote:
Ancora più facile è usare execfile() per eseguire un file python in un
dizionario dal quale poi pescare gli oggetti che servono.
Come vantaggio i tuoi plugin non devono risiedere nel pythonpath, il
risultato
della funzione non è
Non so se si tratta di una soluzione stupida o meno. però potresti
creare un modulo di questo genere:
funzioni/__init__.py (file vuoto)
funzioni/shell.py
funzioni/etc.py
poi importi il modulo con:
import funzioni
e per vedere quali funzioni ci sono fai un:
dir(funzioni)
che ti restituisce
10 matches
Mail list logo