[Python] moduli installabili

Antonio Cavallo a.cavallo a cavallinux.eu
Mer 31 Lug 2013 22:50:06 CEST


Ciao,
in python e' molto più semplice.
Prova con questo..

# plugins/inutile.py
def run(num):
    print "plugin inutile", num, "dal chiamante", VALORE

# main.py
import os
import glob
import imp

def load_plugins(basedir):
    plugins = {}
    filenames = glob.glob(os.path.join(basedir, "*.py"))
    for filename in filenames:
        name = os.path.splitext(os.path.basename(filename))[0]
        plugins[name] = imp.load_source(name, filename)
    return plugins


if __name__ == "__main__":
    plugins = load_plugins("plugins")
    plugins['inutile'].valore = 69
    plugins['inutile'].run(12)

Questo codice pero' non e' rientrante a causa del valore 69 e di come e' stato assegnato.
In teoria potresti iniettare dei valori "locali" direttamente nel frame della funzione run… e rendere i plugin thread-safe.





On 31 Jul 2013, at 13:38, Vittorio Spina <vittorio.spina a gmail.com> wrote:

> Ciao a tutti.
> ho scritto un'applicazione che esegue un programmetto grafico.
> Vorrei poi poter installare vari moduli utilizzando la tecnica della copia del plugin.
> in una cartella metto un file che si chiama per esempio pippo.py
> nel programma principale, succede questo:
> 
> #file main.py
> glabalvariable = "pippo"
> 
> dirList=os.listdir("plugins")
> pluginnames = []
> for fname in dirList:
>         sys.path.insert(0, 'plugins/'+fname)
>         exec("import "+fname)
>         pluginnames.append(fname)
> 
> #main
> numerociclo=0
> while True:
>         for plugin in pluginnames:
>                 exec(plugin +".run("+str(numerociclo)+")")
>         numerococlo+=1
> 
> 
> 
> #  file plugin/plugininutile/plugininutile.py
> def run(num):
>         global glabalvariable #e qui casca l'asino perchè avrei bisogno di rendere disponibili informazioni dal main.py
>         print "al ciclo",num,"la variabile globale vale",glabalvariable
> 
> 
> ok questo sopra è l'esempio. Non so se sto azzardando troppo o se è lecito scrivere una schifezza del genere. Non so se ci sono moduli per fare quello che voglio fare, ma soprattutto, come faccio a stampare la variabile glabalvariable che nel file PLUGIN.py ovviamente mi dice che "is not defined"
> ???
> qualcno mi può aiutare?
> grazie mille.
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python



Maggiori informazioni sulla lista Python