Funcion para limpiar el espacio de trabajo
Ernesto Revilla
aerd en retemail.es
Jue Sep 5 05:01:54 CEST 2002
Hola,
con esto me respondo a mi mismo, buscando una manera para limpiar el espacio
de trabajo para que reimporte todos los módulos y quite todas las variables
globales (en el espacio de nombres del módulo __main__), con lo que en
principio no haría falta un 'reload'. Lo he probado con módulos que cargan a
otros módulos y crean instancias, etc.
Poner la función en un archivo 'clear.py' que se incluye en la secuencia de
arranque del intérprete mediante PYTHONSTARTUP=<ruta>/clear.py:
-----> cut -----> cut -----> cut -----> cut -----> cut -----> cut
def clear(verbose=0, savestate=0):
import sys
globdict=globals()
if savestate:
# Copiar primero las claves de los modulos
globdict['__orgmodules__']=sys.modules.keys()
globdict['__orgvariables__']=None
# Copiar ahora los propios globales.
globdict['__orgvariables__']=globals().keys()
else:
print "\nHaciendo limpieza:",
# borrar variables globales nuevas
# se necesita el .keys(), de lo contrario modifica el propio
diccionario
# sobre que está iterando y da error.
for variable in globdict.keys():
if not variable in globdict['__orgvariables__']:
print ['.',variable][verbose],
del globdict[variable]
print
# borrar módulos que conocemos
orgmodules=globdict['__orgmodules__']
loadedmodules=sys.modules.keys()
print "\nQuitando modulos:",
for module in loadedmodules:
if not module in orgmodules and module[:2]!="__":
print ['.',module][verbose],
del sys.modules[module]
print "\nOk."
clear(savestate=1)
-----> cut -----> cut -----> cut -----> cut -----> cut -----> cut
Si se llama clear() hace limpieza. clear tiene un argumento opcional que si
es 1 (diferente de 0) muestra los nombres de las variables y los módulos que
está quitando.
Aprecio cualquier comentario,
Erny
Más información sobre la lista de distribución Python-es