[Python] Eseguire del codice in una stringa (gestione aggiornamenti?)

Mattsteel Matteo Vitturi mattsteel a hotmail.it
Ven 19 Feb 2010 09:34:23 CET


> Date: Thu, 18 Feb 2010 21:46:54 +0100
> From: michele a nectarine.it
[...] 
> Ora, il RE ha un compito ben preciso: scaricare [e supponiamo, per  
> ora, che questo venga fatto in modo sicuro e senza modifiche] il  
> codice sorgente dell'applicazione, e non ci preoccupiamo per ora di  
> come lo scarica.
> Quello che voglio realizzare in questo modo e` un'applicazione che si  
> autoaggiorna ad ogni avvio, scaricando il codice sorgente ed  
> eseguendolo.
[...]
> Prima domanda: e` possibile tutto cio` ?
> Seconda domanda: quali sono i metodi che devo guardarmi? eval() e  
> compile() possono fare al caso mio?
> 
> Vi ringrazio.
>    Michele
[...]


Mi permetto di rispondere alla tua prima domanda: Personalmente, ho già usato questa tecnica. 



Supponiamo, come dici, di avere il modulo RE e un modulo Applicazione accessibile da parte di RE in esecuzione.

In questo caso, quando RE deve aggiornare Applicazione può fare così:



    appl = 'Applicazione'

    del sys.modules[appl]

    exec( '''import {0}'''.format(appl) )



N.B. exec solleva un eccezione se l'import va male: ti stai esponendo
al rischio di importare del codice non più funzionante o peggio...


Conviene evitare di re-importare in un sol colpo tutta
l'Applicazione. Se Applicazione è suddivisa in più package, puoi
importare all'occorrenza solo la parte effettivamente modificato dal
precedente import.



Ciao.

Matteo.



 		 	   		  
_________________________________________________________________
Scatta, ritocca e condividi le tue foto online. Gratis per te
http://www.windowslive.it/foto.aspx
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100219/0bf21111/attachment.htm 


Maggiori informazioni sulla lista Python