Si disponemos de código python 2.3 en principio, usando decompyle, es posible obtener el código fuente.
Pero... ¿que pasa si el código que queremos compilar es código python pero está embebido en el interprete que estamos usando? Pues que también podemos obtenerlo... Al menos de las funciones. Para ello necesitamos usar un módulo que acabo de descubrir, inspect.
Adjunto un ejemplo de como lo he usado, para decompilar el código de una función (en el ejemplo Document es un módulo built-in):
import inspect
import decompyle
import sys
#--- Módulo
#members = inspect.getmembers(Document)
#for member in members:
# print member
#--- Documento
d = Document.Document("a")
#members = inspect.getmembers(d)
#for member in members:
# print member
#--- Método => Función
#print "Método"
members = inspect.getmembers(d.SetLogger)
im_func = None
for member in members:
if member[0] == 'im_func':
im_func = member[1]
if im_func == None:
raise Exception,"No se ha podido obtener la función para el mètodo."
# Fúnción => Code Object
print "Función"
members = inspect.getmembers(im_func)
func_code = None
for member in members:
if member[0] == 'func_code':
func_code = member[1]
if func_code is None:
raise Exception,"No se ha podido obtener el 'code_object' para la función."
#print type(func_code)
decompyle.decompyle("2.3", func_code, sys.stdout, 0, 0)
No hay comentarios:
Publicar un comentario