diff --git a/Lib/rexec.py b/Lib/rexec.py index 316fc1ca34d..f33041a7c37 100644 --- a/Lib/rexec.py +++ b/Lib/rexec.py @@ -112,7 +112,8 @@ class RExec(ihooks._Verbose): ok_path = tuple(sys.path) # That's a policy decision - ok_builtin_modules = ('array', 'audioop', 'imageop', 'marshal', 'math', + ok_builtin_modules = ('array', 'binascii', 'audioop', 'imageop', + 'marshal', 'math', 'md5', 'parser', 'regex', 'rotor', 'select', 'strop', 'struct', 'time') @@ -229,6 +230,9 @@ def r_import(self, mname, globals={}, locals={}, fromlist=[]): def r_reload(self, m): return self.importer.reload(m) + + def r_unload(self, m): + return self.importer.unload(m) # The s_* methods are similar but also swap std{in,out,err} @@ -274,12 +278,15 @@ def s_import(self, *args): def s_reload(self, *args): self.s_apply(self.r_reload, args) + def s_unload(self, *args): + self.s_apply(self.r_unload, args) + # Restricted open(...) def r_open(self, file, mode='r', buf=-1): if mode not in ('r', 'rb'): raise IOError, "can't open files for writing in restricted mode" - return open(file, 'r', buf) + return open(file, mode, buf) def test():