Python ctypes:获取已加载共享库的句柄
给定共享库的短名称(例如gomp,而不是libgomp.so等),Python中确定该库是否已加载的最佳方法是什么?如果已加载,请查找其完整路径名以便获得ctypes句柄?这是迄今为止我能想到的最佳解决方案,但是阅读Python ctypes:获取已加载共享库的句柄,python,ctypes,Python,Ctypes,给定共享库的短名称(例如gomp,而不是libgomp.so等),Python中确定该库是否已加载的最佳方法是什么?如果已加载,请查找其完整路径名以便获得ctypes句柄?这是迄今为止我能想到的最佳解决方案,但是阅读/proc//maps并对其内容进行字符串解析感觉有点不舒服 import re, ctypes, os.path _WHITESPACE = re.compile('\s+') def get_loaded_lib_pathname(lib_name): soname
/proc//maps
并对其内容进行字符串解析感觉有点不舒服
import re, ctypes, os.path
_WHITESPACE = re.compile('\s+')
def get_loaded_lib_pathname(lib_name):
soname = 'lib%s.so' % (lib_name,)
pid = os.getpid()
with open('/proc/%d/maps' % (pid,)) as f:
for line in f.readlines():
tokens = _WHITESPACE.split(line)
addrs, perms, offset, dev, inode, pathname = tokens[:6]
basename = os.path.basename(pathname)
if basename.startswith(soname):
return pathname
return None
def get_lib_handle(lib_name):
pathname = get_loaded_lib_pathname(lib_name)
if pathname is None:
return None
return ctypes.cdll.LoadLibrary(pathname)
libgomp = get_lib_handle('gomp')