dl — Вызов функций C в общих объектах
Устаревшее начиная с версии 2.6: Модуль dl был удален в Python 3. Используйте модуль ctypes вместо него.
Модуль dl определяет интерфейс к функции dlopen(), которая является наиболее распространённым интерфейсом на платформах Unix для работы с динамически подключаемыми библиотеками. Он позволяет программе вызывать произвольные функции в такой библиотеке.
Предупреждение
Модуль dl обходит систему типов Python и обработку ошибок. При неправильном использовании он может вызвать ошибки сегментации, сбои или другое неправильное поведение.
Примечание
Этот модуль не будет работать, если sizeof(int) == sizeof(long) == sizeof(char
*) Если это не так, при импорте будет поднято исключение SystemError.
Модуль dl определяет следующую функцию:
-
dl.open(name[, mode=RTLD_LAZY]) -
Открыть файл общего объекта и вернуть дескриптор. Режим обозначает отложенную привязку (
RTLD_LAZY) или немедленную привязку (RTLD_NOW). По умолчанию используетсяRTLD_LAZY. Обратите внимание, что некоторые системы не поддерживаютRTLD_NOW.Значение возврата —
dlobject.
Модуль dl определяет следующие константы:
-
dl.RTLD_LAZY -
Полезно в качестве аргумента для
open().
-
dl.RTLD_NOW -
Полезно в качестве аргумента для
open(). Обратите внимание, что на системах, которые не поддерживают немедленную привязку, эта константа не будет отображаться в модуле. Для максимальной переносимости используйтеhasattr()для определения, поддерживает ли система немедленную привязку.
Модуль dl определяет следующее исключение:
-
exception dl.error -
Исключение, поднимаемое, когда произошла ошибка внутри динамических процедур загрузки и подключения.
Пример:
>>> import dl, time
>>> a=dl.open('/lib/libc.so.6')
>>> a.call('time'), time.time()
(929723914, 929723914.498)
Этот пример был протестирован на системе Debian GNU/Linux и является хорошим примером того, что использование этого модуля обычно является плохой альтернативой.
1. Объекты Dl
Объекты Dl, возвращаемые функцией open() выше, имеют следующие методы:
-
dl.close() -
Освободить все ресурсы, кроме памяти.
-
dl.sym(name) -
Возвращает указатель на функцию с именем name, как число, если она существует в указанном общем объекте, иначе
None. Это полезно в коде типа:>>> if a.sym('time'): ... a.call('time') ... else: ... time.time()(Обратите внимание, что эта функция вернет ненулевое число, так как ноль — это указатель NULL)
-
dl.call(name[, arg1[, arg2...]]) -
Вызвать функцию с именем name в указанном общем объекте. Аргументы должны быть либо целыми числами Python, которые будут переданы как есть, либо строками Python, для которых будет передан указатель, либо
None, которые будут переданы как NULL. Обратите внимание, что строки должны передаваться функциям только в видеconst char*, так как Python не будет рад изменённым строкам.Должно быть не более 10 аргументов, и аргументы, которые не указаны, будут считаться
None. Значение возврата функции должно быть C-типомlong, которое является целым числом Python.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/dl.html