当前位置: 首页 > 图灵资讯 > 行业资讯> python探针如何实现

python探针如何实现

来源:图灵python
时间: 2024-06-26 21:37:15

1、通过sysss,可以探测importhook的功能.meta_path实现。

2、import相关操作执行时,import相关库将根据syss执行.meta更改path定义的对象。

sys.meta_path中的对象需要实现find_module方法。这种find_module方法返回none或实现load_module方法的对象。我们可以通过这个对象在import中替换一些图书馆的相关方法。简单的用法如下。通过hooktime.sleep,在slep中打印时间。

实例

importimportlib
importsys
fromfunctoolsimportwraps


deffunc_wrapper(func):
"""这里通过一个装饰来实现狸猫换太子和获取数据的效果"""
@wraps(func)
defwrapper(*args,**kwargs):
#记录开始时间
start=time.time()
result=func(*args,**kwargs)
#统计消耗时间
end=time.time()
print(f"speedtime:{end-start}")
returnresult
returnwrapper


classMetaPathFinder:

deffind_module(self,fullname,path=None):
#执行时可以看到import中的哪些模块
print(f'findmodule:{path}:{fullname}')
returnMetaPathLoader()


classMetaPathLoader:

defload_module(self,fullname):
#将import模块存储在syss中.在modules中,通过判断可以减少import的重复
iffullnameinsys.modules:
returnsys.modules[fullname]
#防止递归调用
finder=sys.meta_path.pop(0)
#导入module
module=importlib.import_module(fullname)
iffullname=='time':
#替换函数
module.sleep=func_wrapper(module.sleep)
sys.meta_path.insert(0,finder)
returnmodule


sys.meta_path.insert(0,MetaPathFinder())


if__name__='__main__':
importtime
time.sleep(1)


#输出示例:
#findmodule:datetime
#findmodule:time
#loadmodule:time
#findmodule:math
#findmodule:_datetime
#speedtime:1.00073385238647468

以上就是python探针的实现,希望对大家有所帮助。更多Python学习指导:基础教程python基础教程

本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。