python側のコードは変更してもC++のコンパイルは必要ない
g++ -I自分のpythonのinclude/python(自分のバージョン) -lpython(自分のバージョン)
ex)pyenvのanacondaの場合
g++ -I/home/ユーザーファイル/.pyenv/versions/anaconda3-4.4.0/include/python3.6m コンパイルファイル -lpython3.6m
| #include<stdio.h> | |
| #include<Python.h> | |
| #include<string> | |
| #include<iostream> | |
| int main(){ | |
| PyObject *pName,*pModule, *pTmp, *pFunc; | |
| char *sTmp; | |
| int data; | |
| Py_Initialize(); | |
| PyObject *sys = PyImport_ImportModule("sys"); | |
| PyObject *path = PyObject_GetAttrString(sys, "path"); | |
| PyList_Append(path,PyUnicode_DecodeFSDefault(".")); | |
| pName = PyUnicode_DecodeFSDefault("py_test1"); | |
| pModule = PyImport_Import(pName); | |
| Py_DECREF(pName); | |
| if(pModule != NULL){ | |
| pFunc = PyObject_GetAttrString(pModule, "func"); | |
| pTmp = PyObject_CallObject(pFunc, NULL); | |
| PyArg_Parse(pTmp, "i", &data); | |
| printf("%d\n",data); | |
| } | |
| Py_Finalize(); | |
| return 0; | |
| } |
| #include<stdio.h> | |
| #include<Python.h> | |
| #include<string> | |
| #include<iostream> | |
| int main(){ | |
| PyObject *pName,*pModule, *pTmp, *pFunc; | |
| PyObject *pArgs, *pValue; | |
| double res_data; | |
| double a = 10.5; | |
| //最初に必ず入れる | |
| Py_Initialize(); | |
| //カレントディレクトリを探す範囲にいれる------------------------- | |
| PyObject *sys = PyImport_ImportModule("sys"); | |
| PyObject *path = PyObject_GetAttrString(sys, "path"); | |
| PyList_Append(path,PyUnicode_DecodeFSDefault(".")); | |
| //--------------------------------------------------------------- | |
| //探すファイルをしてい------------------------------------------- | |
| pName = PyUnicode_DecodeFSDefault("py_test2"); | |
| pModule = PyImport_Import(pName); | |
| Py_DECREF(pName); | |
| //--------------------------------------------------------------- | |
| //タプルの作成 ----------------------------------------------- | |
| pArgs = PyTuple_New(1);//タプルを新しく作成する | |
| pValue = PyFloat_FromDouble(a);//pValueにaの数値を設定 | |
| PyTuple_SetItem(pArgs,0,pValue);//タプルの0の位置にpValueを設定 | |
| //--------------------------------------------------------------- | |
| if(pModule != NULL){ | |
| //pFuncに今回呼び出す関数を設定する(今回はfunc) | |
| pFunc = PyObject_GetAttrString(pModule, "func"); | |
| //pFuncを引数を与える(pArgsはタプルでなければならない) | |
| pTmp = PyObject_CallObject(pFunc, pArgs); | |
| //関数を実行 d:double型を受け取る | |
| PyArg_Parse(pTmp, "d", &res_data); | |
| printf("%f\n",res_data); | |
| } | |
| //最後に必ず入れる | |
| Py_Finalize(); | |
| return 0; | |
| } |
| import random | |
| def func(): | |
| a = [1,2,3,4,5] | |
| b = random.choice(a) | |
| print("hogehoge") | |
| return b |
| import random | |
| def func(data): | |
| print("hogehoge") | |
| a = data | |
| print(a) | |
| list_data = [14,2,3.5,28] | |
| list_data.append(a) | |
| b = random.choice(list_data) | |
| return b |
python側のコードは変更してもC++のコンパイルは必要ない
g++ -I自分のpythonのinclude/python(自分のバージョン) -lpython(自分のバージョン)
ex)pyenvのanacondaの場合
g++ -I/home/ユーザーファイル/.pyenv/versions/anaconda3-4.4.0/include/python3.6m コンパイルファイル -lpython3.6m