Call Python functions from C++ on Ubuntu 12.04
Code
/home/shinya/py_example/mymain.py
import sys def main(args): sys.stdout.write('Hello, world!\n'); if args: sys.stdout.write('{0}\n'.format(args))
/home/shinya/py_example/main.cc
#include <Python.h> #include <cassert> #include <iostream> int main(int argc, char** argv) { Py_Initialize(); assert(Py_IsInitialized()); const char* kModuleName = "mymain"; PyObject* module_name = PyString_FromString(kModuleName); PyObject* module = PyImport_Import(module_name); PyObject* dic = PyModule_GetDict(module); const char* kFuncName = "main"; PyObject* main_func = PyDict_GetItemString(dic, kFuncName); assert(PyCallable_Check(main_func)); PyObject* main_args = PyTuple_New(1); PyObject* main_args_0 = PyString_FromString("Hello, Python!"); PyTuple_SetItem(main_args, 0, main_args_0); PyObject_CallObject(main_func, main_args); // raise Exception PyObject_CallObject(main_func, NULL); PyErr_Print(); Py_Finalize(); return 0; }
Check
$ export PYTHONPATH=${PYTHONPATH}:/home/shinya/py_example $ g++ -Wall -I/usr/include/python2.7 main.cc -lpython2.7 $ ./a.out Hello, world! Hello, Python! TypeError: main() takes exactly 1 argument (0 given)