python 土撥鼠庫 Python 匯入與註冊

2021-10-13 08:39:36 字數 3812 閱讀 4782

背景

最近一直學習寫乙個poc掃瞄框架,但是不知道如何下手,正巧因為一些需要有朋友在研究pocsuite的實現原理,順麵蹭一些知識點,補一補python基礎的不足,為以後編寫poc框架打地基。

匯入靜態模組匯入

import os#直接匯入python自帶模組或第三方安裝後的模組

import mylib#直接匯入自編寫模組

import core.lib.api#在python預設查詢路徑中新增包中的某模組(本地、官方和安裝的第三方庫的路徑)

import ..config.conf#相對路徑中匯入包中的模組

import sys

import ***#新增路勁到python查詢路徑後匯入模組

from *** import ***#從某包匯入某模組或者從某模組匯入莫物件

from xx.xx.xx import ***#從某包的某包(模組)匯入某模組或者某物件

以上都是常見的靜態匯入方法,下面來解釋下匯入原理,這裡按照python2來介紹:

globals()和locals()

globals()返回乙個包含全域性物件的乙個字典,包含建立的各種全域性變數--自定義類及其例項、資料型別及其例項等等,locals()是區域性的的

匯入後sys.modules

引用一段話來說明(加入globals(),並做檢查了,而不是locals()):

python中所有載入到記憶體的模組都放在sys.modules。當import乙個模組時首先會在這個列表中查詢是否已經載入了此模組,如果載入了則只是將模組的名字加入到正在呼叫import的模組的local名字空間中。如果沒有載入則從sys.path目錄中按照模組名稱查詢模組檔案,模組檔案可以是py、pyc、pyd,找到後將模組載入記憶體,並加入到sys.modules中,並將名稱匯入到當前的local名字空間。

動態匯入

匯入的模組在執行到一定程度才能確定

__import__(modname,globals(),locals(),,-1)

是formlist後面要加入某些模組的時候,在中間新增內容

-1是相對+絕對引入

0是絕對引入

1是相對引入

from a import b

#equals

__import__(a,gloabls(),locals(),[b],-1)

註冊註冊模組

def moduleregister(regmodule):

filename = os.path.basename(regmodule)

filepath = os.path.dirname(regmodule)

log.debug("開始檢查待註冊模組%s"%regmodule)

if regmodule.__name__ in globals():

log.info("%s模組名已經註冊"%regmodule)

raise exception("模組名已經註冊")

try:

log.debug("開始註冊模組%s"%regmodule)

__import__(filename,globals(),locals(),,-1)

log.debug("成功註冊模組%s"%regmodule)

except exception,reason:

raise exception("模組註冊失敗")

註冊類、例項物件

#pocsuite

def registerpoc(pocclass):

module = pocclass.__module__.split('.')[-1]

if module in kb.registeredpocs:

return

kb.registeredpocs[module] = pocclass()

把類對或者例項物件加入全域性變數的字典裡

#引入依賴的外部物件、模組、包

import os

import sys

#定義全域性類和函式

def registercls(regmod,clsname):

filename = os.path.basename(regmod)

filepath = os.path.dirname(regmod)

try:

__import__(filename,globals(),locals(),[clsname],-1)

except exception,reason:

raise exception("模組註冊失敗")

def registermod(regmodule):

filename = os.path.basename(regmodule)

filepath = os.path.dirname(regmodule)

try:

__import__(filename,globals(),locals(),,-1)

except exception,reason:

try:

except exception,reason:

raise exception("模組註冊失敗")

def getvarbymod(regmod,varname):

try:

return getattr(regmod,varname)

except exception,reason:

raise exception("從模組獲取變數物件時失敗")

def getfuncbymod(regmod,funcname):

try:

return getattr(regmod,funcname)

except exception,reason:

raise exception("從模組獲取方法物件時失敗")

def getclsbymod(regmod,clsname):

try:

return getattr(regmod,clsname)

except exception,reason:

raise exception("從模組獲取類物件時失敗")

def getclnbycls(clsobj,clnname):

try:

return getattr(clsobj,clnname)

except exception,reason:

raise exception("從類中獲取屬性失敗")

def getfuncbycls(clsobj,funcname):

try:

return getattr(clsobj,clnname)

except exception,reason:

raise exception("從類中獲取屬性失敗")

def createclsist(clsobj,*args,**kwargs):

try:

return clsobj(*args,**kwargs)

except exception,reason:

raise exception("建立例項失敗")

def executefunc(funcobj,*args,**kwargs):

try:

return funcobj(*args,**kwargs)

except exception,reason:

raise exception("執行函式失敗")

def getclsbyist(regobj):

try:

return regobj.__class__

except exception,reason:

raise exception("從例項獲取類失敗")

Python學習筆記 1 1 2 認識Python

一.課程目標 二.詳情解讀 1.初識pythonpython語言是一種高階程式語言,它於1991年由吉多.範羅蘇姆 guido van rossum 發明。目前主要應用於web開發 gui開發 網路爬蟲 資料科學 人工智慧等領域。python官方 python語言也是一種多正規化程式語言,即物件導向...

python實現演算法 kmp演算法python實現

kmp演算法python實現 kmp演算法 kmp演算法用於字串的模式匹配,也就是找到模式字串在目標字串的第一次出現的位置 比如abababc 那麼bab在其位置1處,bc在其位置5處 我們首先想到的最簡單的辦法就是蠻力的乙個字元乙個字元的匹配,但那樣的時間複雜度會是o m n kmp演算法保證了時...

python呼叫qt Qt 下呼叫 Python

qt是乙個跨平台的c 圖形使用者介面應用程式框架,而python是一門非常強大的程式語言,本文主要介紹了如何在osx系統下qt呼叫python指令碼。先上 include 包含呼叫python相應的標頭檔案 include int main int argc,char ar 初始化python直譯器...