バージョン 2.6 で撤廃: dl モジュールは Python 3.0 で削除されました。代わりに ctypes モジュールを使ってください。
dl モジュールは dlopen() 関数へのインタフェースを定義します。これはダイナミックライブラリにハンドルするための Unix プラットフォーム上の最も一般的なインタフェースです。そのライブラリの任意の関数を呼ぶプログラムを与えます。
警告
dl モジュールは Python の型システムとエラー処理をバイパスしています。もし間違って使用すれば、セグメンテーションフォルト、クラッシュ、その他の不正な動作を起こします。
ノート
このモジュールは sizeof(int) == sizeof(long) == sizeof(char *) でなければ働きません。そうでなければimportするときに SystemError が送出されるでしょう。
dl モジュールは次の関数を定義します:
共有オブジェクトファイルを開いて、ハンドルを返します。モードは遅延結合(RTLD_LAZY)または即時結合(RTLD_NOW) を表します。デフォルトは RTLD_LAZY です。いくつかのシステムは RTLD_NOW をサポートしていないことに注意してください。
返り値は dlobject です。
dl モジュールは次の定数を定義します:
open() の引数として使います。即時結合をサポートしないシステムでは、この定数がモジュールに現われないことに注意してください。最大のポータビリティを求めるならば、システムが即時結合をサポートするかどうかを決定するために hasattr() を使用してください。
dl モジュールは次の例外を定義します:
動的なロードやリンクルーチンの内部でエラーが生じたときに送出される例外です。
例:
>>> import dl, time
>>> a=dl.open('/lib/libc.so.6')
>>> a.call('time'), time.time()
(929723914, 929723914.498)
この例はDebian GNU/Linuxシステム上で行なったもので、このモジュールの使用はたいてい悪い選択肢であるという事実のよい例です。
open() によって返されたDlオブジェクトは次のメソッドを持っています:
メモリーを除く全てのリソースを解放します。
name という名前の関数が参照された共有オブジェクトに存在する場合、そのポインター(整数値)を返します。存在しない場合 None を返します。これは次のように使えます:
>>> if a.sym('time'):
... a.call('time')
... else:
... time.time()
(0は NULL ポインターであるので、この関数は0でない数を返すだろうということに注意してください)
参照された共有オブジェクトの name という名前の関数を呼出します。引数は、Python整数(そのまま渡される)、Python文字列(ポインターが渡される)、 None (NULL として渡される) のどれかでなければいけません。 Pythonはその文字列が変化させられるのを好まないので、文字列は const char* として関数に渡されるべきであることに注意してください。
最大で10個の引数が渡すことができ、与えられない引数は None として扱われます。関数の返り値は C long (Python整数である)です。