pickle y unpickle de todas las variables locales

Pepe Aracil pepe en diselpro.com
Vie Feb 6 01:29:32 CET 2009


Hola.

podrías crear un diccionario cuyas claves sean las claves de locals
y sus valores los valores de locals pero serializados.

Algo así como:
[code]
myself={}
exclude=['__builtins__', '__name__', '__doc__','myself','exclude']
for k in locals().keys():
    if k in exclude: continue
    try:
        myself[k] = pickle.dumps(locals()[k])
    except:
        print "%s no es pickleable" % k
[/code]

No he probado este codigo que he tecleado al vuelo pero ...

cuando termina este bucle, deberias tener en el diccionario
myself todo lo pickleable en locals.

Además podrías guardarte en el diccionario información como las 
entradas del diccionario sys.modules, para recontruir el entorno
posteriormente de la forma mas fidedigna posible.

Una vez lo tienes todo empaquetado en myself, ya lo puedes serializar
todo a un fichero.

Deserializar para recontruir el entorno locals ya es trivial.

...
locals()[k]=myself[k]
...

Saludos.






Jose Caballero escribió:
> Hola a todos,
> 
> ¿existe alguna forma sencilla de poder serializar todas las variables y
> objetos que hay definidos en cierto momento de ejecución para poder
> de-serializarlos más tarde?
> Con los métodos dump() y load() de la pickle se puede hacer para un único
> objeto, y además éste debe ser conocido a la hora de hacer el load(). Algo
> así como
> 
> myobj = pickle.load( file )
> 
> Pero yo necesito poder hacer un load de TODAS las variables y objetos. Sería
> algo así como hacer un dump de todo lo que hay listado en locals(), y luego
> poder hacer un load de todo ello.
> ¿Se puede hacer?
> 
> 
> 
> Muchas gracias por adelantado.
> Saludos,
> Jose
> _______________________________________________
> Lista de correo Python-es 
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es