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