On Mon, 21 May 2001 08:40:09 +0200 (MET DST), Jerome Alet <alet@unice.fr> wrote:
On Wed, 16 May 2001, Toby Dickenson wrote:
On Wed, 16 May 2001 16:44:37 +0200 (MET DST), Jerome Alet <alet@unice.fr> wrote:
So my question is: is this code thread safe, wrt to other Zope threads accessing the os module methods while they are redirected to mine ? I don't want other Zope threads to access my own methods, just the current one.
The cheeky solution involves using the standard library module rexec. It was designed for replacing modules in a security sandbox (for example, replacing the standard 'open' function with one that limits access to a specific directory) but it will do exactly what you want too.
The python documentation for this module is a little thin, but there is deeper documentation on www.python.org.
I really don't understand how to do that, does someone have working examples ?
thanks in advance !
import rexec import os def customised_listdir(f): # customise this return ['perl','python','c++'] def make_glob(): r_env = rexec.RExec() module = r_env.add_module('os') for name,value in os.__dict__.items(): setattr(module,name,value) module.listdir = customised_listdir r_env.s_exec('import glob') return r_env.r_eval('glob.glob') glob = make_glob() def test(): print glob('/p*') if __name__=='__main__': test() Toby Dickenson tdickenson@geminidataloggers.com