Загрузите библиотеку из памяти на Linux с Python 3 - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь загрузить библиотеку из памяти, а не использовать файл с использованием ctypes и CDLL.

Вот то, что я пробовал до сих пор безуспешно.

Чтение файла в память только для целей тестирования

file_bytes = open('./lib.so', 'rb').read()
lib = CDLL(file_bytes)

Это приводит к следующему сообщению об ошибке:

self._handle = _dlopen(self._name,mode)
ValueError: embedded null byte

Затем я попытался использовать библиотеку io:

io_bytes = io.BytesIO(file_bytes)
lib = CDLL(io_bytes)

и я получаю эту ошибку:

self._handle = _dlopen(self._name,mode)
TypeError: expected str, bytes, or os.PathLike object, not _io.BytesIO

Я посмотрел на объекты PathLike, и я не уверен, есть ли способ ссылаться на данные моей памяти с ним.

1 Ответ

0 голосов
/ 23 октября 2019

Вы можете попробовать что-то вроде этого

def load_shared_lib(lib_bytes):
    temp_lib = '/tmp/temp_lib'
    with open(temp_lib, 'wb') as temp_file:
        temp_file.write(lib_bytes)
        lib = CDLL(temp_lib)
    os.remove(temp_lib)
    return lib
...