如何获得foo.py的反汇编字节码?
How can I get the disassembled bytecode of foo.py?
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
的反汇编字节码?
模块对象不存储为初始化模块而执行的字节码的任何记录。最好的办法是打开模块的 .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 亿次迭代循环,我不想导入它。
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
的反汇编字节码?
模块对象不存储为初始化模块而执行的字节码的任何记录。最好的办法是打开模块的 .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 亿次迭代循环,我不想导入它。