gpt4 book ai didi

python - 从 python 解释器恢复 .pyc 文件

转载 作者:太空狗 更新时间:2023-10-30 02:45:21 24 4
gpt4 key购买 nike

因为我比较笨,删除了一些python文件,备份失败。在执行此操作之前,我打开了 python 解释器(即运行 python),然后使用命令 import myfile.py

编辑:我实际上使用了命令 import myfile,这显然更糟。

有什么方法可以从我打开的 python 解释器 session 中恢复 .pyc(或更好的 .py,但这似乎不可能)文件?

最佳答案

字节码反编译器 uncompyle2可以将 Python 2.x 类、方法、函数和代码反编译为源代码(注意:通过 Reassembling Python bytecode to the original code? )。

这对于函数来说已经足够好了:

from StringIO import StringIO
from uncompyle2 import uncompyle
from inspect import *

def decompile_function(f, indent=''):
s = StringIO()
uncompyle(2.7, f.func_code, s)
return '%sdef %s%s:\n%s %s' % (
indent,
f.func_name,
inspect.formatargspec(*inspect.getargspec(f)),
indent,
('\n ' + indent).join(''.join(s.buflist).split('\n')))

不幸的是,因为类已经被执行,所以它不能恢复它们的结构;您需要单独反编译这些方法并希望这就足够了:

def decompile_class(c):
return 'class %s(%s):\n' % (
c.__name__,
','.join(b.__module__ + '.' + b.__name__ for b in c.__bases__)) + \
'\n'.join(decompile_function(m.im_func, ' ')
for n, m in inspect.getmembers(c) if inspect.ismethod(m))

完整解决方案:

def decompile_module(mod):
return '\n\n'.join(decompile_function(m) if isfunction(m) else
decompile_class(m) if isclass(m) else
'# UNKNOWN: ' + repr((n, m))
for n, m in inspect.getmembers(mod) if inspect.getmodule(m) is mod)

关于python - 从 python 解释器恢复 .pyc 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com