python代码二段:

call.py
def  test():
    
print   ' hello world '


def  add(a,b):
    
return  a  +  b

api.py
import  io

def  load_test():
    fp 
=  open( ' call.py ' , ' r ' )
    buffer 
=   ''
    
if  fp:
        buffer 
=  fp.read()
    fp.close()
    
return  buffer

cpp代码:
#include  < stdio.h >
#include 
< stdlib.h >
#include 
< Python.h >

int  main( int  argc,  char   * argv[])
{
    Py_Initialize();  
    
if ( ! Py_IsInitialized())   
    {  
        
return   - 1 ;  
    }  
    
    PyRun_SimpleString(
" import sys " );
    PyRun_SimpleString(
" sys.path.append('./') " );
    PyObject
*  pName;
    PyObject
*  pModule;
    PyObject
*  pDict;
    PyObject
*  pFunc;
    
    pName 
=  PyString_FromString( " api " );
    pModule 
=  PyImport_Import(pName);
    
if ( ! pModule)
    {
        printf(
" can't find call.py " );
        getchar();
        
return   - 1 ;
    }
    
    pDict 
=  PyModule_GetDict(pModule);
    
if ( ! pDict)
    {
        
return   - 1 ;
    }
    
    {
        pFunc 
=  PyDict_GetItemString(pDict, " load_test " );
        
if ( ! pFunc  ||   ! PyCallable_Check(pFunc))
        {
            printf(
" can't find function [test] " );
            getchar();
            
return   - 1 ;
        }
        
        PyObject 
* pFn  =  PyObject_CallObject(pFunc, 0 );
        
char *  buffer  =  PyString_AsString(pFn);
        printf(
" %s\n " ,buffer);
        
        PyObject
*  o  =  Py_CompileString(buffer, " none " ,Py_file_input);
        PyObject
*  m  =  PyImport_ExecCodeModule( " a.a " ,o);
        PyObject
*  d  =  PyModule_GetDict(m);
        pFunc 
=  PyDict_GetItemString(d, " add " );
        
if ( ! pFunc  ||   ! PyCallable_Check(pFunc))
        {
            printf(
" can't find function [add] " );
            getchar();
            
return   - 1 ;
        }
        
        PyObject
*  args  =  PyTuple_New( 2 );
        PyTuple_SetItem(args,
0 ,Py_BuildValue( " l " , 3 ));
        PyTuple_SetItem(args,
1 ,Py_BuildValue( " l " , 4 ));
        PyObject 
* pAdded  =  PyObject_CallObject(pFunc,args);
        
int  ret  =  PyInt_AsLong(pAdded);  
        printf(
" add value:%d\n " ,ret);    
    }
 
    Py_Finalize();    
    system(
" PAUSE " );    
    
return   0 ;
}

这段代码和上一篇有点区别
主要区别是从从内存载入python模块然后调用函数
主要部分是这块:
        PyObject* o = Py_CompileString(buffer,"none",Py_file_input);
        PyObject* m = PyImport_ExecCodeModule("a.a",o);
        PyObject* d = PyModule_GetDict(m);
buffer是python源码字符串

在python2.7中执行正常