GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wichtige .py-Datei verloren (als 0-Byte-Datei überschrieben), aber die alte Version immer noch als Modul in IPYTHON GELADEN – kann sie abgerufen werden?

Wie in den Kommentaren vermerkt, inspect.getsource funktioniert nicht, da es von der Originaldatei abhängt (d. h. module.__file__ ).

Beste Option:Prüfen Sie, ob ein .pyc vorhanden ist Datei (z. B. foo.pyc sollte neben foo.py stehen ). Wenn ja, können Sie Decompile Python 2.7 .pyc verwenden, um es zu dekompilieren.

Die inspect module speichert auch die Quelle. Vielleicht haben Sie Glück und verwenden inspect.getsource(module) , oder inspect.getsourcelines(module.function) wenn es in der Vergangenheit aufgerufen wurde.

Andernfalls müssen Sie das Modul "manuell" neu erstellen, indem Sie die Exporte überprüfen (dh module.__globals__ ). Konstanten und so weiter sind offensichtlich, und für Funktionen können Sie func.func_name verwenden um seinen Namen zu erhalten, func.__doc__ um den Docstring zu erhalten, inspect.getargspec(func) um die Argumente zu erhalten, und func.func_code um Details über den Code zu erhalten:co_firstlineno erhält die Zeilennummer, dann co_code bekommt den Code. Mehr zum Thema Dekompilieren finden Sie hier:Exploring and decompiling python bytecode

Zum Beispiel, um uncompyle2 zu verwenden :

>>> 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!'

Aber nein – mir ist keine einfachere Methode bekannt, um ein Modul zu nehmen und den Quellcode wieder herauszuholen.


Linux
  1. Wie bekomme ich sicher die Version von Ksh?

  2. Eine .gz-Datei entpacken, um eine Textdatei zu erhalten, aber eine Binärdatei erhalten?

  3. Alte Windows-Version jetzt kaufen und trotzdem das Upgrade kostenlos erhalten?

  4. Wie kann ich den Mikrocode (ucode) in iwlwifi parsen, um die Versionsnummern zu erhalten?

  5. Wie kann ich eine Binärdatei aus einer .py-Datei erhalten?

Python – Keine solche Datei oder Verzeichnis, aber ich kann es sehen!?

Wie finde ich die Version von Fedora, die ich verwende?

Wie kann ich den Tastaturstatus unter Linux abrufen?

Wie erhalte ich das absolute Verzeichnis einer Datei in Bash?

Wie kann ich beim Lesen einer Datei mit „weniger“ oder „mehr“ den Inhalt in Farbe erhalten?

Wie kann ich die Länge einer Videodatei von der Konsole abrufen?