[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