python写linux的钩子函数,Python 钩子函数详解

###### 钩子函数

```

import pluggy

hookspec = pluggy.HookspecMarker('aaa')

hookimpl = pluggy.HookimplMarker('aaa')

class MySpec():

@hookspec() # firstresult=True设置之后,等到第一个返回非空结果的hookimpl,就返回(hookwrapper还是正常执行)

def myhook(self, arg_one, arg_two):

pass

class MyPlugin():

@hookimpl() # tryfirst=True,trylast=True定义执行顺序

def myhook(self, arg_one):

print('arg_one')

return arg_one

class MyPluginOther():

@hookimpl()

def myhook(self, arg_one, arg_two):

print('arg_one, arg_two')

return arg_one, arg_two

class MyPluginWrapper():

'''

hookwrapper作为每个钩子函数的上下文运行

在所有hook之前先运行

'''

@hookimpl(hookwrapper=True)

def myhook(self):

print('-------- hool wrapper before -----------')

outcome = yield # 生成器会给outcome send一个pluggy.callers._Result对象

print('-------- hook wrapper after -----------')

res = outcome.get_result() # 通过get_result拿到所有钩子函数的结果

print('get all hook return ', res)

outcome.force_result(1) # 强制更改钩子函数返回结果

print('-------- hook wrapper end-----------')

test1 = pluggy.PluginManager('aaa')

test1.add_hookspecs(MySpec)

test1.register(MyPlugin())

test1.register(MyPluginOther()) # 后注册的先执行,收集进结果

test1.register(MyPluginWrapper())

result = test1.hook.myhook(arg_one=1, arg_two=2) # hookimpl调用,必须用关键字语法

print(result)

------------------

输出结果:

-------- hool wrapper before -----------

arg_one, arg_two

arg_one

-------- hook wrapper after -----------

get all hook return [(1, 2), 1]

-------- hook wrapper end-----------

1

```

Vue之生命周期函数和钩子函数详解

在学习vue几天后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对对vue的生命周期不甚了解.只知道简单的使用,而不知道为什么,这对后面的踩坑是相当不利的.因为我们有时候会在几个钩子函 ...

vue2.0项目实战(4)生命周期和钩子函数详解

最近的项目都使用vue2.0来开发,不得不说,vue真的非常好用,大大减少了项目的开发周期.在踩坑的过程中,因为对vue的生命周期不是特别了解,所以有时候会在几个钩子函数里做一些事情,什么时候做,在哪 ...

vue生命周期钩子函数详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35585701/article/ ...

python super()函数详解

引言: 在类的多继承使用场景中,重写父类的方法时,可能会考虑到需要重新调用父类的方法,所以super()函数就是比较使用也很必要的解决方法: 文章来源: http://www.cnblogs.com/ ...

Python匿名函数详解

python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的. 在Python中,lambda ...

04 python之函数详解

一.函数初识 函数的产生:函数就是封装一个功能的代码片段. li = ['spring', 'summer', 'autumn', 'winter'] def function(): count = ...

Python sorted函数详解(高级篇)

sorted() 函数对所有可迭代的对象进行排序操作. sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 s ...

python socket函数详解

关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄得清楚.通透,并记录下来, ...

Python print函数详解

1 """ 2 print(...) 3 print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=Fals ...

随机推荐

hadoop2.6.4 搭建单机模式

注(要先安装jdk,最好jdk版本>=1.7) 安装jdk  http://www.cnblogs.com/zhangXingSheng/p/6228432.html     给普通用户添加su ...

Expert 诊断优化系列------------------内存不够用么?

现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...

Android-Activity-Dialog theme touch outsize

最近遇到一个蛋疼的问题: 一个Activity,主题设置成 Dialog 然后点击外面要求这个Activity 不能关闭. 这下好了,直接在 style 的 theme 里面加一个属性就好了. 加上去 ...

hdu 4002 Find the maximum

Find the maximum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

django 学习笔记(一)搭建基础环境

1.安装django 下载地址 https://github.com/django/django 解压后进入文件夹运行指令 >> python setup.py install 2.创建工 ...

DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络

一.深层神经网络 深层神经网络的符号与浅层的不同,记录如下: 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2 ...

在Workload Automation中实现suspend分析

1. 背景 这里涉及到两个工具analyze_suspend.py和Workload Automation. 下面analyze_suspend.py简称为ASPY,Workload Automati ...

js伪数组转数组

方法1: 遍历伪数组,在把值push进一个空数组中 方法2: 使用数组的slice方法,它返回的是数组,使用call或apply指向伪数组 var arr = [].slice.call(argume ...

RabbitMQ简单应用の公平分发(fair dipatch)

公平分发(fair dipatch)和轮询分发其实基本一致,只是每次分发的机制变了,由原来的平均分配到现在每次只处理一条消息 1.MQ连接工厂类Connection package com.mmr.r ...

Struts2--HelloWord

Struts2官网 官网指南 官网下载Struts2.5-min-lib.zip解压把lib目录下jar包拷贝到web项目lib目录下 配置web.xml文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值