Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ctypes:获取已加载共享库的句柄_Python_Ctypes - Fatal编程技术网

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

给定共享库的短名称(例如gomp,而不是libgomp.so等),Python中确定该库是否已加载的最佳方法是什么?如果已加载,请查找其完整路径名以便获得ctypes句柄?

这是迄今为止我能想到的最佳解决方案,但是阅读
/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')