如何获取foo.py的反汇编字节码?

时间:2020-11-12 06:16:34

标签: python bytecode

foo.py

for i in range(10 ** 8):
    i

py_testing.py

import foo
import dis
print(dis.dis(foo))

当我执行py_testing.py时,输出如下:

None

如何获取foo.py的反汇编字节码?

1 个答案:

答案 0 :(得分:0)

模块对象不存储为初始化模块而执行的字节码的任何记录。最好的选择是打开模块的.py文件,然后将内容传递到dis.dis

with open(foo.__file__) as f:
    dis.dis(f.read())

这假定该模块具有一个.py文件。

如果导入模块很昂贵或有其他问题,可以使用importlib.util.find_spec查找模块的文件而无需导入:

import importlib.util

filepath = importlib.util.find_spec('foo').origin

with open(filepath) as f:
    dis.dis(f.read())

考虑到foo.py中的1亿次迭代循环,我不想导入它。

相关问题