Modificato nella versione 2.3: Disabled module.
Questo modulo contiene la classe RExec, che supporta i metodi r_eval(), r_execfile(), r_exec() e r_import(), che sono versioni limitate delle funzioni standard Python eval(), execfile() e delle istruzioni exec ed import. Il codice eseguito in questo ambiente limitato avrà accesso solamente ai moduli ed alle funzioni che vengono considerate sicure; potete derivare RExec per aggiungere o rimuovere le funzionalità che desiderate.
[hooks[, verbose]]) |
hooks è un'istanza della classe RHooks o di una sua sotto classe.
Se viene omessa o è None
, viene istanziata la
classe predefinita RHooks.
Ogni volta che il modulo rexec cerca un modulo (anche uno
built-in) o legge il codice di un modulo, non utilizza realmente il
file system da sè. Piuttosto, richiama i metodi di un'istanza RHooks
che è stata passata al costruttore o creata da questo. (In realtà
l'oggetto RExec non effettua queste chiamate -- queste vengono
eseguite da un oggetto loader a livello di modulo che è parte
dell'oggetto RExec. Questo permette un diverso livello di
flessibilità, che può essere utile quando si cambia il meccanismo di
import in un ambiente limitato).
Fornento un oggetto RHooks alternativo, possiamo controllare gli accessi al file system effettuati per importare un modulo, senza modificare il vero algoritmo che controlla l'ordine in cui questi accessi vengono effettuati. Per esempio, potete sostituire un oggetto RHooks che passa tutte le richieste del filesystem ad un file server, attraverso qualche meccanismo RPC, come ILU. Il loader delle applet di Grail utilizza questo tecnica per supportare l'import delle applet da un URL per una directory.
Se verbose è vero, vengono generate informazioni addizionali di debug sullo standard output.
È importante sapere che il codice in esecuzione in un
ambiente limitato può ancora chiamare la funzione
sys.exit(). Per non permettere al codice limitato di
terminare l'interprete, proteggete sempre le chiamate che eseguono
codice limitato con un'istruzione try/except che
intercetti l'eccezione SystemExit. Rimuovere la funzione
sys.exit() dall'ambiente limitato non è sufficiente - il
codice limitato può ancora usare raise SystemExit
. Rimuovere
SystemExit non è un'opzione ragionevole; alcuni
codici di libreria ne fanno uso e non funzionerebbero senza.
Vedete anche: