假设我在python解释器中,定义一个函数,如下所示:
def h(a):
return a
如果我想查看字节码(不是使用dis的反汇编),我通常可以使用h.func_code.co_code
。有没有其他方法可以查看字节码?在
例如,在解释器中,如果我只输入h
而不进行函数调用,则会得到函数的地址。我能用那个地址得到字节码吗?有别的办法吗?在
来自评论的一些附加信息:
该应用程序是用python编写的,并使用Py2App、cx_freeze或py2exe等打包。我在可执行文件上耍了些小把戏,现在,当启动时,可执行文件将我转储到python命令行。从那里,我手动地在interepeter中输入我的函数h
。在
存在h.func_code
的其他属性,例如co_varnames
、co_argcount
等,但是{
如果我在解释器中输入h.func_code.co_code
,我得到'code' object has no attribute 'co_code'
。在
更新:再次从评论中更新。据我所知,这些操作码已经被重新映射为随应用程序一起提供的python解释器。在
如果您定义了自己的
def h(): pass
伪函数,并且该函数没有.func_code.co_code
值,那么所包含的python解释器很可能是一个自定义编译版本,其中co_code
插槽已被清除。在解决方法很简单,将
Contents/Resources
zipfiles(在所有子目录中)复制到其他地方,将它们添加到您的PYTHONPATH
中,然后将代码导入到您自己的解释器中。在相关问题 更多 >
编程相关推荐