访问python模块代码
我想要访问模块在导入时执行的代码。访问python模块代码
可视化源代码或编辑它不是这里的问题。我想知道这些指令的存储位置。
例
module.py
def func():
print 'func'
print 'module'
的Python控制台
>>> import module
module
>>> import dis
>>> dis.dis(module)
Disassembly of func:
0 LOAD_CONST 1 ('func')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> dir(module)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'func']
我在哪里可以找到<function>
对象,或func_code或任何其存储print 'module'
指令?
dis.dis([bytesource])
拆卸bytesource对象。 bytesource可以表示模块,类,方法,函数或代码对象。对于一个模块,它会分解所有功能。
由于module.py是一个模块,它将分解模块中的所有功能。由于“打印”模块“”呼叫不在功能中,因此不会被拆卸。
编辑:
要回答这个问题,实际(约抱歉),作为语句是当你导入模块本身,我敢肯定,你可以按如下解决这个问题(虽然这是一个叫有点恐怖,因为解决方案去,有可能是一个更好的方式来做到这一点):
class importer():
def import_module():
import module
dis.dis(importer)
这是DIS作品,但哎,看来如何工作的,轻微的虐待。
这回答了问题*“为什么'dis.dis'不显示'print'指令'*,但是**不是** *”哪里可以找到...“*。 – jonrsharpe 2014-08-29 13:34:35
好吧,也许dis.dis不是适合这项工作的工具,但是有没有另一个可以让我访问这个特定的“打印”模块的指令?编辑:正如jonrsharpe说的在我之前20s – Centime 2014-08-29 13:34:55
@jonrsharpe还好吗? – Phillammon 2014-08-29 13:48:18
@pokoli,没有关系 - 这不是一个奎因,它试图访问字节码。 – Phillammon 2014-08-29 13:33:49
'print'module''不存在于任何对象中。它在模块定义时执行,但不是模块的*部分*。在包含定义模块的代码的文件和执行该文件产生的'module'对象之间存在区别。 – chepner 2014-08-29 13:37:39
@chepner:哦,好的,谢谢!所以如果我想深入一点,我是否应该打开一个不同的问题:如何挂钩导入内建以获取在导入时执行的代码的跟踪? (我是新来的) – Centime 2014-08-29 13:42:36