黑客意志

Python代码热重载函数reload

我走过山时,山不说话,
我路过海时,海不说话,
小毛驴滴滴答答,倚天剑伴我走天涯。
大家都说我因为爱着杨过大侠,才在峨嵋山上出了家,
其实我只是爱上了峨嵋山上的云和霞,
像极了十六岁那年的烟花。

  代码热重载是在一个项目中比较常见的需求,尤其是在扫描服务的开发中,扫描插件的代码需要经常修整,因此如何做到插件代码能够热重载加载,而不是每次修改代码后需要重启服务就变得尤为重要。由于最近正好在一个Python项目中需要实现热重载需求,因此写了个python版的代码热重载demo,仅供参考。

python中的reload函数

python2中的reload函数可以直接使用,无需导入第三方模块,可以直接使用:

1
reload(module) # reload接收的参数必须是已经导入的模块

python3中的reload函数移到了imp库里面,因此需要导入:

1
2
from imp import reload
reload(module)

demo_1

demo1是基于最常见的需求,即同一个目录下有2个文件(plugin.py,scan.py),scan.py文件调用plugin.py文件。

plugin.py文件如下:

1
print "plugin start scan ......"

scan.py文件如下:

1
2
3
4
5
import time
import plugin
while 1:
reload(plugin)
time.sleep(1)

运行scan.py,然后手工修改plugin.py文件内容,观察输出的变化。

demo2

demo2会稍微复杂一点点,即同一个目录下有2个文件(plugin.py,scan.py),scan.py文件调用plugin.py文件里面的crack函数。

plugin.py文件如下:

1
2
def crack():
print "plugin start scan ......"

scan.py文件如下:

1
2
3
4
5
6
import time
import plugin
while 1:
reload(plugin)
eval("plugin.crack()")
time.sleep(1)

运行结果跟demo1一样,就是在调用之前先reload一下模块,然后再利用eval调用模块的函数。

demo3

demo3针对更为现实的需求,即不同目录下的2个文件(./scan.py,./plugins/plugin.py),scan.py文件调用plugins目录下的plugin.py文件里面的crack函数。

plugin.py文件如下:

1
2
def crack():
print "plugin start scan ......"

scan.py文件如下:

1
2
3
4
5
6
7
import time
exec("import plugins.plugin")
while 1:
reload(eval("plugins.plugin"))
eval("plugins.plugin.crack()")
time.sleep(1)

运行结果跟demo1一样,这样需要注意的是,reload不支持from plugins improt plugin的方式重载模块,因此可以使用import plugins.plugin的方式导入模块并重载。

赞(0)
分享到: 更多 (0)

黑客技术,黑客教程,黑客软件,黑客入门,黑客工具,黑客平台,黑客下单,渗透测试,CTF,菠菜,源码,暗网,安卓,物联网安全,网络安全周,国家安全,企业安全,盗QQ号,正规黑客,接单黑客,SRC测试,黑客修改,黑客交流,黑客追款,APP渗透,黑客系统

联系我们联系我们