7.3.1 モジュールの書き方

まずモジュールの名前を決める。

某という名前のモジュールのインプリメンテーションが入った C のソースファイルは、 某module.c としよう。

(1)
最初に書くのは次の1行である。
#include <Python.h>
(2)
Python で 某.なんとか(string) という呼び出しをして呼ばれるメソッド (C 言語のプログラムとしては「関数」) の実体を用意する。 ここは自分がやりたいことを書くわけで、ケース・バイ・ケースである。
static PyObject *
某_なんとか(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command); // コマンドを実行する
    return PyLong_FromLong(sts);
}
(3)
モジュールのメソッドテーブルを用意する。
static PyMethodDef 某Methods[] = {
    ...
    {"なんとか",  某_なんとか, METH_VARARGS,
     "Execute a shell command."},
    ...
    {NULL, NULL, 0, NULL}        /* Sentinel */
};
(4)
モジュール定義構造体を用意する。
static struct PyModuleDef 某module = {
   PyModuleDef_HEAD_INIT,
   "某",   /* name of module */
   某_doc, /* module documentation, may be NULL */
   -1,       /* size of per-interpreter state of the module,
                or -1 if the module keeps state in global variables. */
   某Methods
};
(5)
初期化関数を用意する。
PyMODINIT_FUNC
PyInit_某(void)
{
    return PyModule_Create(&某module);
}



桂田 祐史