PythonからC言語のライブラリを呼び出してみました。PythonからC言語で作成したライブラリsystem2のsystem2を呼び出し,その中でLinuxのコマンドを実行するsystem()関数を呼び出すというものです。すべて1つのシェルの中にインラインで記述しています。
#!/bin/bash
libname=system2.so
gcc -I /usr/local/include/python3.11 -fPIC -Wall -xc -shared -o ${libname} - << EOF
#include <Python.h>
#include <stdlib.h>
PyObject* system2(PyObject* self, PyObject* args)
{
const char* command;
if(!PyArg_ParseTuple(args, "s", &command)) return NULL;
long len = strlen(command);
int result = system(command);
if(result == EOF) len = result;
return PyLong_FromLong(len);
}
static PyMethodDef system2_methods[] =
{
{"system2", system2, METH_VARARGS, "execute system command"},
{NULL},
};
#define system2_doc "module.\n"
static struct PyModuleDef module =
{
PyModuleDef_HEAD_INIT,
"system2",
system2_doc,
-1,
system2_methods
};
PyMODINIT_FUNC PyInit_system2(void)
{
return PyModule_Create(&module);
}
EOF
if [ $? -eq 0 ]; then
python3 -c "import system2; system2.system2(\"ls -la\")"
else
echo "Compiling failed"
fi
[kubo@centos7 link2c]$ ./system.sh
合計 32
drwxrwxr-x. 2 kubo kubo 70 4月 5 08:39 .
drwxrwxr-x. 6 kubo kubo 58 4月 4 19:06 ..
-rwxrwxr-x. 1 kubo kubo 875 4月 5 08:21 hello.sh
-rwxrwxr-x. 1 kubo kubo 8600 4月 5 08:24 my.so
-rwxrwxr-x. 1 kubo kubo 915 4月 5 08:39 system.sh
-rwxrwxr-x. 1 kubo kubo 8608 4月 5 08:39 system2.so