A hopefully simple example calling python from C using PyRun_File, and getting information returned to C via the globals/locals dictionary.

#include <Python.h>
#include <stdio.h>
#include <stdint.h>
int main(int argc,char *argv[])
{
    FILE* file;
    Py_Initialize();
    PyObject* main_module = PyImport_AddModule("__main__");
    PyObject* main_dict = PyModule_GetDict(main_module);
    file = fopen("mypython.py","r");
    PyRun_File(file, "mypython.py",Py_file_input,main_dict,main_dict);
    printf("size %d\n",PyDict_Size(main_dict));
    PyObject* mybytes = PyDict_GetItemString(main_dict,"mybytes");
    printf("%p\n",mybytes);
    uint64_t* data = (uint64_t*)PyBytes_AsString(mybytes);
    printf("%d %d\n",data[0],data[1]);
    Py_Finalize();
    return 0;
}

import numpy as np
print("hello")
mybytes = np.array([1,2]).tobytes()
print(type(mybytes))
gcc -o junk junk.cc -I $CONDA_PREFIX/include/python3.6m -L $CONDA_PREFIX/lib/ -l python3.6m

  • No labels