GNU/Linux >> Tutoriales Linux >  >> Linux

Archivo .py importante perdido (sobrescrito como archivo de 0 bytes), pero la versión anterior aún está CARGADA EN IPYTHON como módulo. ¿Se puede recuperar?

Como se indica en los comentarios, inspect.getsource no funcionará porque depende del archivo original (es decir, module.__file__ ).

Mejor opción:verifica si hay un .pyc archivo (por ejemplo, foo.pyc debe estar al lado de foo.py ). Si lo hay, puede usar Decompile Python 2.7 .pyc para descompilarlo.

Los inspect Los módulos también almacenan en caché la fuente. Es posible que puedas tener suerte y usar inspect.getsource(module) o inspect.getsourcelines(module.function) si ha sido llamado en el pasado.

De lo contrario, deberá reconstruir el módulo "manualmente" inspeccionando las exportaciones (es decir, module.__globals__ ). Las constantes y otras cosas son obvias, y para funciones puedes usar func.func_name para obtener su nombre, func.__doc__ para obtener la cadena de documentación, inspect.getargspec(func) para obtener los argumentos, y func.func_code para obtener detalles sobre el código:co_firstlineno obtendrá el número de línea, luego co_code obtendrá el código. Hay más información sobre cómo descompilar eso aquí:Exploración y descompilación del código de bytes de Python

Por ejemplo, para usar uncompyle2 :

>>> def foo():
...     print "Hello, world!"
...
>>> from StringIO import StringIO
>>> import uncompyle2
>>> out = StringIO()
>>> uncompyle2.uncompyle("2.7", foo.func_code, out=out)
>>> print out.getvalue()
print 'Hello, world!'

Pero no, no conozco ningún método más directo para tomar un módulo y recuperar el código fuente.


Linux
  1. ¿Se pueden recuperar los archivos sobrescritos?

  2. ¿Cómo puedo obtener la resolución (ancho y alto) de un archivo de video desde una línea de comando de Linux?

  3. ¿Núcleo volcado, pero el archivo principal no está en el directorio actual?

  4. ¿Cómo puedo obtener el estado del teclado en Linux?

  5. JAVA_HOME y PATH están configurados, pero java -version aún muestra el anterior

¿Cómo puedo obtener la duración de un archivo de video desde la consola?

¿Comprar la versión anterior de Windows ahora y obtener la actualización de forma gratuita?

¿Cómo puedo analizar el microcódigo (ucode) en iwlwifi para obtener los números de versión?

¿Cómo puedo obtener la cantidad de memoria disponible de forma portátil entre distribuciones?

¿Cómo puedo obtener un binario de un archivo .py?

¿Cómo obtener el tamaño físico de un archivo en Linux?