python ihooks使用实例

来源:互联网 发布:2017淘宝手机店铺装修 编辑:程序博客网 时间:2024/05/24 02:05
import ihooks
import os
import __builtin__
import imp
import sys

from imp import C_EXTENSION, PY_SOURCE, PY_COMPILED
from imp import C_BUILTIN, PY_FROZEN, PKG_DIRECTORY
BUILTIN_MODULE = C_BUILTIN
FROZEN_MODULE = PY_FROZEN

rootpkg_dir = "ROOT"

class PackageFS:
def __init__(self):
self.prefix_path = r"f: estscript"

def printMsg(self, msg):
print "PackageFS -- ", msg

def CombinePath(self, filenameinPkg):
i = filenameinPkg.find(rootpkg_dir)
pos = i + 1 + len(rootpkg_dir)
filename = filenameinPkg[pos:]
realpath = self.prefix_path + "\" + filename
print "filename = ", filename
print "realpath = ", realpath
return realpath
def isdir(self,path):
realpath = self.CombinePath(path)
self.printMsg("isdir")
print "path = ", path
print "realpath = ", realpath
return os.path.isdir(realpath)

def path_isfile(self, path):
self.printMsg("path_isfile")
realpath = self.CombinePath(path)
return os.path.isfile(realpath)

def openfile(self, x):
self.printMsg("openfile")
parms = list(x)
path = parms[0]
realpath = self.CombinePath(path)
parms[0] = realpath
print " realpath = ", realpath
print "*(tuple(parms))", tuple(parms)


return open(*(tuple(parms)))
def listdir(self, path):
self.printMsg("listdir")
realpath = self.CombinePath(path)
return os.listdir(realpath)


class XyyLoader(ihooks.ModuleLoader):
pass
class XyyHook(ihooks.Hooks):
def __init__(self):
self.pck_fs = PackageFS()
def printMsg(self, msg):
print "XyyHook -- ", msg

def IsInPackage(self, filename):
if (rootpkg_dir in filename):
return True
else:
return False

def path_exists(self, x):
self.printMsg("path_exists")
if (self.IsInPackage(x)):
return self.pck_fs.exists(x)
else:
return os.path.exists(x)
def path_isdir(self, x):
self.printMsg("path_isdir")
if (self.IsInPackage(x)):
re = self.pck_fs.isdir(x)
print "x is path? ", re
return self.pck_fs.isdir(x)
else:
return os.path.isdir(x)
def path_isfile(self, x):
self.printMsg("path_isfile")
if (self.IsInPackage(x)):
return self.pck_fs.isfile(x)
else:
return os.path.isfile(x)
def openfile(self, *x):
self.printMsg("openfile")
print "*"*20, "x = ", x
print "*"*20, "x[0] = ", x[0]
path,right = x
if (self.IsInPackage(path)):
print "call package openfile path = ", path
return self.pck_fs.openfile((path, right))
else:
print "call fs openfile path = " , path
return open(*x)
def listdir(self, x):
self.printMsg("listdir")
if (self.IsInPackage(x)):
return self.pck_fs.listdir(x)
else:
return os.listdir(x)

class XyyImporter(ihooks.ModuleImporter):
pass



xyyhook = XyyHook()
xyyLoader = XyyLoader(xyyhook)
importer = ihooks.ModuleImporter(xyyLoader)
ihooks.install(importer)
原创粉丝点击