Closed GoogleCodeExporter closed 9 years ago
I'm sorry, there was a mistake in my above code. Corrected, the function should
look
like:
def runscript(script):
"""
Run the specified script after adding its directory path to
system path.
This function is used by the low-level plugin code.
"""
_mc = ModuleCleaner()
try:
addscriptpath(script)
watchdog.reset()
argv = sys.argv
sys.argv = [ script ]
execfile(script, globals())
sys.argv = argv
except:
raise
finally:
_mc.revert()
and this should be at the bottom (or wherever, really):
class ModuleCleaner(object):
def __init__(self):
self.path = sys.path
self.std = [sys.stdin, sys.stdout, sys.stderr]
self.baseModules = sys.modules.copy()
def revert(self):
for moduleName in sys.modules.keys():
if not self.baseModules.has_key(moduleName):
del(sys.modules[moduleName]) #forcibly unload the module
sys.stdin, sys.stdout, sys.stderr = self.std
sys.path = self.path
Original comment by cbwhiz@gmail.com
on 20 Dec 2009 at 7:39
This code will still fail if the recent file box (Alt-7) is used due to issue
43.
Original comment by cbwhiz@gmail.com
on 20 Dec 2009 at 7:57
PS: http://pyunit.sourceforge.net/notes/reloading.html is where I got the idea
for
the ModuleCleaner object.
Original comment by cbwhiz@gmail.com
on 20 Dec 2009 at 8:00
Functionality implemented, slightly differently, in
http://code.google.com/p/idapython/source/detail?r=273
Thanks for the idea!
Original comment by gergely.erdelyi
on 4 Feb 2010 at 9:01
Original issue reported on code.google.com by
cbwhiz@gmail.com
on 20 Dec 2009 at 7:21