GNU/Linux >> Znalost Linux >  >> Linux

Ztratili jste důležitý soubor .py (přepsán jako soubor o velikosti 0 bajtů), ale stará verze se stále NAČTALA V modulu IPYTHON – lze ji získat?

Jak je uvedeno v komentářích, inspect.getsource nebude fungovat, protože závisí na původním souboru (tj. module.__file__ ).

Nejlepší možnost:zkontrolujte, zda tam není .pyc soubor (např. foo.pyc by měl být vedle foo.py ). Pokud existuje, můžete jej dekompilovat pomocí Decompile Python 2.7 .pyc.

inspect moduly také ukládají do mezipaměti zdroj. Možná budete mít štěstí a použijete inspect.getsource(module) nebo inspect.getsourcelines(module.function) pokud byl volán v minulosti.

V opačném případě budete muset modul znovu sestavit "ručně" kontrolou exportů (tj. module.__globals__ ). Konstanty a podobně jsou zřejmé a pro funkce můžete použít func.func_name získat jeho název, func.__doc__ chcete-li získat dokumentační řetězec, inspect.getargspec(func) pro získání argumentů a func.func_code pro získání podrobností o kódu:co_firstlineno získá číslo řádku a poté co_code získá kód. Zde je více o dekompilaci:Prozkoumání a dekompilace pythonového bytecode

Chcete-li například použít 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!'

Ale ne – nejsem si vědom žádné přímočařejší metody, jak vzít modul a získat zdrojový kód zpět.


Linux
  1. Lze obnovit přepsané soubory?

  2. Jak bezpečně získat verzi Ksh?

  3. Jak mohu získat rozlišení (šířku a výšku) pro video soubor z příkazového řádku linuxu?

  1. Jak mohu získat stav klávesnice v Linuxu?

  2. Jak získat velikost tar.gz v (MB) souboru v pythonu

  3. Jak získám absolutní adresář souboru v bash?

  1. Python – žádný takový soubor nebo adresář, ale vidím to!?

  2. Jak mohu analyzovat mikrokód (ucode) v iwlwifi, abych získal čísla verzí?

  3. Jak získat fyzickou velikost souboru v Linuxu?