4

假设我在 python 解释器中并定义一个函数如下:

def h(a):
  return a

如果我想查看字节码(不是使用 dis 的反汇编),我通常可以使用h.func_code.co_code. 还有其他方法可以查看字节码吗?

例如,在解释器中,如果我只是键入h而不使其成为函数调用,我会得到函数的地址。我可以使用该地址来获取字节码吗?还有其他方法吗?

评论中的一些附加信息:

该应用程序是用 python 编写的,并使用 Py2App、cx_freeze 或 py2exe 之类的东西打包。我在可执行文件上玩了一些技巧,现在,当启动时,可执行文件将我转储到 python 命令行。从那里,我手动将我的函数h输入到 interepeter 中。

的其他属性h.func_code存在,例如co_varnames,co_argcount等,但co_code不存在。

如果我在h.func_code.co_code解释器中输入,我会得到'code' object has no attribute 'co_code'.

更新:再次来自评论。据我所知,操作码已针对应用程序附带的 python 解释器重新映射。

4

1 回答 1

5

如果您已经定义了自己的def h(): pass虚拟函数,并且该函数没有.func_code.co_code值,那么很可能包含的 python 解释器是一个自定义编译版本,其中co_code插槽已被清除。

解决方法很简单,将Contents/Resourceszip 文件(在所有子目录中)复制到其他地方,将它们添加到您的PYTHONPATH并将代码导入您自己的解释器中。

于 2012-09-20T14:28:21.010 回答